2

我通过以下方式使用 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

4

4 回答 4

9

为了解决这个问题和其他问题,我建议使用该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);
于 2012-10-03T22:47:44.340 回答
2

您可以填充最后一行直到填满,也可以将其设置ColumnSpan为占用空白空间。

于 2012-10-03T13:37:59.397 回答
1

最后一行不可见,因为最后一行不完整。在您有 3 列和 4 个单元格的情况下,您需要再添加 2 个空单元格以使最后一行完整。

于 2012-10-03T13:35:28.173 回答
0

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);
于 2019-02-15T05:44:46.680 回答