我正在创建一个解析器,将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(); }
此代码正确地将图像插入到文档中.当图像在表格内时会出现问题,这在我们正在处理的文档中很常见. OpenXml结构最终会像这样结束:
DocumentBody =>表=> Cell =>段落=>画画
所以在iTextSharp术语中,映射到:
将带有图像的段落直接添加到单元格会生成一个空的零高度表.如果我在段落中添加一个块,图像会出现,但是会大幅调整大小(更小) – 我无法弄清楚调整大小的基础是:
using (var document = new Document(PageSize.A4)) { PdfWriter.GetInstance(document,FileMode.Create)); document.Open(); var paragraph = new Paragraph(); var image = Image.GetInstance(@"C:\image1.jpg"); paragraph.Add(new Chunk(image,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(); }
如果有人可以帮助我将这个图像放入单元格而不调整大小,那将是完美的.
更新*
解决方法
尝试直接将图像添加到单元格,而不是首先将其添加到段落中:
var cell = new PdfPCell { PaddingLeft = 5,PaddingRight = 5 }; cell.HorizontalAlignment = Element.ALIGN_CENTER; cell.AddElement(paragraph); cell.AddElement(image);
阅读你的例子,你也可以省略cell.AddElement(段落);因为你的段落似乎是空的.
请注意,使用addElement(image)将缩放图像以适应表列宽度的100%(通常不希望图像与其他列重叠).您可以使用图像上的setWidthPercentage()方法更改此百分比.