我正在创建一个解析器,将Word文档转换为PDF,并在此过程中进行一些专门的处理.我选择使它成为一个递归解析器,以匹配OpenXml的结构.
我遇到了处理图像的一些问题.给定OpenXml的结构,图像始终是段落内的绘图元素.如果该段落直接在doc中,这样可以正常工作,基本上就是这样(对于这个例子来说,解开了递归):
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();
}
Run Code Online (Sandbox Code Playgroud)
此代码正确地将图像插入到文档中.当图像在表格内时会出现问题,这在我们正在处理的文档中很常见.OpenXml结构最终会像这样结束:
DocumentBody => Table => Cell => Paragraph => Drawing
所以在iTextSharp术语中,映射到:
Document => Table => Cell => Paragraph => Image
将带有图像的段落直接添加到单元格会生成一个空的零高度表.如果我添加块到该段时的形象出现,但大幅调整(小) - 我想不出什么是大小调整的依据是:
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();
}
Run Code Online (Sandbox Code Playgroud)
如果有人可以帮助我将这个图像放入单元格而不调整大小,那将是完美的.
更新*
我已经确定图像本身没有原生调整大小 - 如果我从生成的pdf中提取图像并保存它,它会保留原始图像的尺寸.
尝试Image直接将其添加到单元格中,而不是将其添加到Paragraph第一个单元格中:
var cell = new PdfPCell { PaddingLeft = 5, PaddingTop = 5, PaddingBottom = 5, PaddingRight = 5 };
cell.HorizontalAlignment = Element.ALIGN_CENTER;
cell.AddElement(paragraph);
cell.AddElement(image);
Run Code Online (Sandbox Code Playgroud)
阅读您的示例,您也可以省略该cell.AddElement(paragraph);行,因为您的段落似乎是空的。
请注意,使用addElement(image)将缩放图像以适合表列宽度的 100%(您通常不希望图像与其他列重叠)。您可以使用setWidthPercentage()图像上的方法来更改此百分比。