c# – 如何将带图像的段落添加到iTextSharp表格中的单元格?

我正在创建一个解析器,将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术语中,映射到:

文件=>表=> Cell =>段落=>图片

将带有图像的段落直接添加到单元格会生成一个空的零高度表.如果我在段落中添加一个块,图像会出现,但是会大幅调整大小(更小) – 我无法弄清楚调整大小的基础是:

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();
}

如果有人可以帮助我将这个图像放入单元格而不调整大小,那将是完美的.

更新*

我已经确定图像本身没有原生调整大小 – 如果我从生成的pdf中提取图像并保存它,它会保留原始图像的尺寸.

解决方法

尝试直接将图像添加到单元格,而不是首先将其添加到段落中:
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()方法更改此百分比.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...