Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# PdfTable:最后一个单元格不可见_C#_.net_Itextsharp - Fatal编程技术网

C# PdfTable:最后一个单元格不可见

C# PdfTable:最后一个单元格不可见,c#,.net,itextsharp,C#,.net,Itextsharp,我以以下方式使用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(myT

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

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

您可以填充最后一行,直到填充完毕,也可以将其设置为
列span
,以占用空空间。

要解决此问题和其他问题,我建议使用
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);
CompleteRow()
方法将完成此操作。这会在PDF末尾添加一个空单元格,但您会注意到它显示一个带边框的空单元格。因此,为了避免这种行为,您必须在调用
CompleteRow()
方法之前设置
DefaultCell.border=Rectangle.NO_border

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

这是可行的,除了CompleteRow通过在行中放置一个有边框的列来完成该行,我无法撤消该操作。我最终要做的是要么知道我短了多少列并设置列的跨度,要么知道我短了多少单元格并添加没有边框的空白单元格。你只需添加
myTable.DefaultCell.Border=Rectangle.NO_Border;
用于CompleterRow方法创建无边框的单元格。