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

时间:2015-12-29 08:31:25

标签: c# pdf itext

我正在尝试创建没有边框的表格,在我的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条件不为真时那个单元格应该为空吗?

1 个答案:

答案 0 :(得分:3)

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

另请参阅How to generate pdf if our column less than the declared table columnItextSharp, number of Cells not dividable by the length of the row以及Odd Numbered Cell Not Added To PdfPdfTable: last cell is not visible以及......

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

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