为什么第二行表格不会被写入?

我正在尝试创建没有边框的表格,在我的PDF文档顶部有4列和2行。 问题是第二行不会被写入。 这是我的代码:

float[] columnWidths = { 2, 1, 1, 1}; PdfPTable table = new PdfPTable(columnWidths); table.WidthPercentage = 100; if (...) //true { if (...) //true { PdfPCell p = new PdfPCell(new Phrase("AAA:_______________",infoFont)); p.BorderWidth = 0; table.AddCell(p); // fixed pos. 1st col,1st row } if (...) //true { PdfPCell p = new PdfPCell(new Phrase("BBB:_____", infoFont)); p.BorderWidth = 0; table.AddCell(p); // fixed pos. 2nd col,1st row } if (...) //true { PdfPCell p = new PdfPCell(new Phrase("CCC:_____", infoFont)); p.BorderWidth = 0; table.AddCell(p); // fixed pos. 3rd col,1st row } if (...) //true { PdfPCell p = new PdfPCell(new Phrase("DDD:_____", infoFont)); p.BorderWidth = 0; table.AddCell(p); // fixed pos. 4th col,1st row } } if (...) //true { if (...) //true { PdfPCell p = new PdfPCell(new Phrase("EEE: " + eee)); p.BorderWidth = 0; table.AddCell(p); // fixed pos. 1st col,2nd row } if (...) //true { PdfPCell p = new PdfPCell(new Phrase("FFF: " + fff)); p.BorderWidth = 0; table.AddCell(p); // fixed pos. 2nd col,2nd row } if (...) //true { PdfPCell p = new PdfPCell(new Phrase("GGG: " + ggg)); p.BorderWidth = 0; table.AddCell(p); // fixed pos. 3rd col,2nd row } if (...) //true { PdfPCell p = new PdfPCell(new Phrase("HHH:___________________")); p.BorderWidth = 0; table.AddCell(p); // fixed pos. 4th col,2nd row } } document.Add(table); 

我怎么处理这个? 第二个问题:我可以为每个if条件设置固定位置(检查代码中的注释),这样当第一行中的一个if条件不为真时,那个单元格应该为空吗?

我假设您已将代码简化到您共享的代码段不再与您自己的代码一致的程度。 您正在创建一个包含4列的表。 如果添加4个单元格,则会渲染一行。 如果添加8个单元格,则会渲染两行。 但是:如果只添加7个单元格,则会添加一行。 将省略不完整行中的3个单元格,因为iText仅呈现完整的行。

另请参见如果我们的列小于声明的表列和ItextSharp, 如何生成pdf ,单元格的数量不能按行的长度划分 , 奇数编号的单元格未添加到Pdf和PdfTable:最后一个单元格不可见 …

这解释了为什么没有显示第二行。 添加以下行以查看是否可以解决此问题:

 table.CompleteRow(); 

至于你的另一个问题:你总是可以像这样添加一个空单元格:

 PdfPCell cell = new PdfPCell(); if (someCondition) { cell.addElement(new Paragraph("AAA")); } table.addCell(cell); 

最后,代码中还有另一个错误。 这没有任何意义:

 p.BorderWidth = 0; 

边框宽度为0并不意味着不会显示边框。 正如在ISO-32000-1之前多次解释的那样,将宽度为0的线定义为宽度等于设备可以显示的最小宽度的线。 如果您不想使用任何边框:

 p.Border = PdfPCell.NO_BORDER; 

最后,我需要请你帮忙:我们重新设计了iText网站,我们在感恩节发布了它。 我们现在注意到,在更改之前,我们没有像以前那样多次访问。 鉴于您需要的所有信息都可以在在线文档中找到,并且鉴于您仍然需要提出问题,我们想知道该网站有什么问题。 我们可以做些什么来改善内容吗? 可能是什么原因导致人们远离我们的网站? 你为什么问这么多问题已在官方文件中得到解答? 我们现在有太多内容吗?