Itextsharp V 5.x:pdfptable中的图像单元格高度

时间:2011-08-14 20:03:13

标签: itextsharp

我正在创建表格并将单元格添加到包含文本或图像内容的表格中。

var  pdfTable = new PdfPTable(2);
                nCell = new PdfPCell(new Phrase("A")) {HorizontalAlignment = 1};
                pdfTable.AddCell(nCell);
                pdfTable.AddCell("B");
                pdfTable.AddCell(qrImg);
                pdfTable.AddCell(image39);
                pdfTable.AddCell("C");
                pdfTable.AddCell("D");
                pdfTable.SpacingBefore = 20f;
                pdfTable.SpacingAfter = 30f;
                document.Add(pdfTable);

渲染3行并在row2中显示图像

如果我通过首先创建pdfpcell对象来添加单元格:

 var cell = new PdfPCell(qrImg};
 pdfTable.AddCell(nCell);

只有第1行和第3行可见。

如果我将高度属性添加到单元格,则图像会被显示。

我的问题(3但相关); 是否需要在添加带图像的单元格时指定高度(单元格添加了文本内容 - 短语resenders正确)? 在创建新单元格时是否存在我缺少的东西,这会阻止图像被渲染? 添加图像内容时,我应该一直使用Addcell(图像)吗?

谢谢大家, 月

1 个答案:

答案 0 :(得分:0)

如果您browse source,则更容易理解正在发生的事情。 iText中的表格保留了一个名为DefaultCell的属性,可以反复使用。这样做是为了使基本单元属性在不同单元之间保持不变。当您致电AddCell(Image)时,DefaultCell的图片会被设置为图片,然后会添加到表格中,最后图片会被空出来。

543     defaultCell.Image = image;
544     AddCell(defaultCell);
545     defaultCell.Image = null;

PdfCell(Image)构造函数实际上在内部调用重载PdfPCell(Image, bool)并将false作为第二个参数fit传递。这是构造函数的条件:

152     if (fit) {
153         this.image = image;
154         Padding = borderWidth / 2;
155     }
156     else {
157         column.AddText(this.phrase = new Phrase(new Chunk(image, 0, 0, true)));
158         Padding = 0;
159     }

如果您将false传递给适合(默认值),您会看到图像以更复杂的方式添加。

所以基本上你可以用三种主要方式添加一个图像(好吧,如果你使用嵌套表格或块或短语,实际上更多),下面的第一个选择默认值并且可能是你想要的。第二个更原始,但让你更接近你可能想要的。第三个是最原始的,并假设你知道你正在做什么。

var qrImg = iTextSharp.text.Image.GetInstance(sampleImage1);

//Use the DefaultCell, including any existing borders and padding
pdfTable.AddCell(qrImg);

//Brand new cell, includes some padding to get the image to fit
pdfTable.AddCell(new PdfPCell(qrImg, true));

//Brand new cell, image added as a Chunk within a Phrase
pdfTable.AddCell(new PdfPCell(qrImg));