使用嵌套表时,表宽度必须大于零异常

时间:2014-07-03 20:05:12

标签: nested itext pdfptable

我正在尝试使用带有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 个答案:

答案 0 :(得分:1)

您报告的问题无法复制。我已将您的代码复制/粘贴到一个独立的示例NestedTables中,生成的PDF看起来没问题:nested_tables.pdf

我发现了两个可能导致问题的原因:

  1. 你正在使用一个过时的或(更糟糕的)非官方版的iText(谁知道这个非官方版本里面有什么)。
  2. 您的实际代码与您共享的代码段一样邋((但在这种情况下,您甚至无法编译它)。
  3. 这些内容在您的代码段中是不可能的:

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

    您定义了一个名为outerTable的变量,并在下一行中设置名为table的变量的宽度(不会在代码中的任何位置定义)。

    您使用:

     cell = new PdfPCell("");
    

    但是没有PdfPCell构造函数接受String值。

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