我以下列方式使用PdfPTable
var myTable = new PdfPTable( 3 );
foreach(var nextString in myStrings)
{
var nextCell = new PdfPCell( new Phrase( nextString, smallFont ) );
nextCell.Border = Rectangle.NO_BORDER;
nextCell.AddCell(nextCell);
}
pdfDocument.Add(myTable);
一切都很完美,然后总细胞数乘以列数(3)。但是当我想创建一个包含3列但只有4个单元格的表时 - 最后一行是不可见的。
怎么解决这个问题?
itextsharp 5.3.3.0
为了解决这个问题和其他问题,我建议使用PdfPTable
方法CompleteRow()
。
这将确保任何不完整的行都添加了额外的单元格以使其完整,以便它们显示在生成的PDF中。
通常,不完整的行将是逻辑错误,但是通过使用CompleteRow()
,您可以轻松识别出现这些错误的位置,并对其进行更正。
就你的例子而言:
var myTable = new PdfPTable( 3 );
foreach(var nextString in myStrings)
{
var nextCell = new PdfPCell( new Phrase( nextString, smallFont ) );
nextCell.Border = Rectangle.NO_BORDER;
nextCell.AddCell(nextCell);
}
myTable.CompleteRow();
pdfDocument.Add(myTable);
您可以填充最后一行,直到它填满,或者您也可以设置它的ColumnSpan
占据空白区域。
最后一行不可见,因为最后一行未完成。在您的情况下,有3列和4个单元格,您需要再添加2个空单元格以使最后一行完成。
CompleteRow()
方法将做的事情。这会在PDF的末尾添加一个空单元格,但您会注意到它显示带边框的空单元格。因此,为了避免这种行为,您必须在调用DefaultCell.Border = Rectangle.NO_BORDER
方法之前设置CompleteRow()
。
var myTable = new PdfPTable( 3 );
foreach(var nextString in myStrings)
{
var nextCell = new PdfPCell( new Phrase( nextString, smallFont ) );
nextCell.Border = Rectangle.NO_BORDER;
nextCell.AddCell(nextCell);
}
myTable.DefaultCell.Border = Rectangle.NO_BORDER;
myTable.CompleteRow();
pdfDocument.Add(myTable);