我正在创建表格并将单元格添加到包含文本或图像内容的表格中。
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(图像)吗?
谢谢大家, 月
答案 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));