【发布时间】:2014-09-22 17:33:51
【问题描述】:
我正在创建一个解析器,它可以将 Word 文档转换为 PDF,并在此过程中进行一些专门的处理。我选择使它成为一个递归解析器来匹配 OpenXml 的结构。
我在处理图像时遇到了一些问题。鉴于 OpenXml 的结构,图像始终是段落内的绘图元素。如果段落直接在文档中,这可以正常工作,基本上就像这样(本示例中的递归解开):
using (var document = new Document(PageSize.A4))
{
PdfWriter.GetInstance(document, new FileStream(path, FileMode.Create));
document.Open();
var paragraph = new Paragraph();
var image = Image.GetInstance(@"C:\image1.jpg");
paragraph.Add(image);
document.Add(paragraph);
document.Close();
}
此代码正确地将图像插入到文档中。当图像位于表格内时会出现问题,这在我们正在处理的文档中很常见。那里的 OpenXml 结构最终会是这样:
DocumentBody => 表格 => 单元格 => 段落 => 绘图
所以在 iTextSharp 术语中,它映射到:
文档 => 表格 => 单元格 => 段落 => 图像
将带有图像的段落直接添加到单元格会生成一个空的零高度表格。如果我在段落中添加一个块,图像会出现但会大幅调整大小(更小) - 我无法弄清楚调整大小的基础是什么:
using (var document = new Document(PageSize.A4))
{
PdfWriter.GetInstance(document, new FileStream(path, FileMode.Create));
document.Open();
var paragraph = new Paragraph();
var image = Image.GetInstance(@"C:\image1.jpg");
paragraph.Add(new Chunk(image, 0, 0));
var table = new PdfPTable(1);
var cell = new PdfPCell { PaddingLeft = 5, PaddingTop = 5, PaddingBottom = 5, PaddingRight = 5 };
cell.HorizontalAlignment = Element.ALIGN_CENTER;
cell.AddElement(paragraph);
table.AddCell(cell);
document.Add(table);
document.Close();
}
如果有人可以帮助我将这张图片放入单元格中不调整大小,那将是完美的。
更新 *
我已经确定图像本身没有被原生调整大小 - 如果我从生成的 pdf 中提取图像并保存它,它会保留原始图像的尺寸。
【问题讨论】:
标签: c# itextsharp