2014-07-03 28 views
1

我试图在iText中使用嵌套表格。我得到一个DocumentException:使用嵌套表时,表格宽度必须大于零例外

表格宽度必须大于零。

外表有16列。我调用一个传入外部表的方法。此方法添加两个内部表。如果我添加其中一个内表,它工作正常。如果我添加第二个内部表,我得到从PdfPTable.writeSelectedRows方法抛出的异常。

private final float[] columnWidths = {183, 31, 88, 49, 35, 25, 35, 35, 35, 32, 32, 33, 35, 60, 46, 26 };  

public void buildPdfReport(ByteArrayOutputStream out) { 
    Document document; 
    PdfWriter pdfWriter; 

    document= new Document(PageSize.LETTER.rotate(), 2, 2, 5, 2); 
    pdfWriter = PdfWriter.getInstance(document, out); 
    document.open(); 

    PdfPTable outerTable = new PdfPTable(columnWidths); 
    table.setTotalWidth(770F); 
    table.setLockedWidth(true); 
    buildNestedTables(table); 

    document.add(outerTable); 
    document.newPage(); 
    document.close(); 
    pdfWriter.close(); 

} 

private void buildNestedTables(PdfPTable outerTable) { 
    PdfPTable innerTable1 = new PdfPTable(1); 
    PdfPTable innerTable2 = new PdfPtable(2); 
    PdfPCell cell; 

    innerTable1.addCell("Cell 1"); 
    innerTable1.addCell("Cell 2"); 
    outerTable.addCell(innerTable1); 

    innerTable2.addCell("Cell 3"); 
    innerTable2.addCell("Cell 4"); 
    outerTable.addCell(innerTable2); 

    cell = new PdfPCell(""); 
    cell.setColspan(14); 
    outerTable.addCell(cell); 
} 

我不知道我在想什么。

感谢您的帮助,

格雷格

回答

1

您要举报的问题不能被复制。我已经复制/粘贴你的代码放到一个独立的例子NestedTables和生成的PDF看起来OK:nested_tables.pdf

我看到你的问题,有两种可能的原因:

  1. 您使用的是过时的或(更糟)非官方iText版本(谁知道这是一个非官方版本)。
  2. 您的实际代码与您共享的代码片段一样琐碎(但在这种情况下,您甚至无法编译它)。

这些事情,在你的代码段是不可能的:

PdfPTable outerTable = new PdfPTable(columnWidths); 
table.setTotalWidth(770F); 

你定义一个名为outerTable变量,并在下一行设置名为table可变宽度(即不被任何定义在你的代码中)。

您使用:

cell = new PdfPCell(""); 

但没有PdfPCell构造函数,它接受一个String值。

请下载the standalone example并检查它是否适用于您。这个对我有用;如果它不适合你,你应该升级你的iText版本。

+0

嗨布鲁诺,我刚刚在我的代码中发现了一个错字,我改变了外表的宽度,而不是设置内表的宽度。在我解决之后,一切正常。感谢您的评论。 – Greg

相关问题