2

我正在尝试将嵌套表与 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);
}

我不确定我错过了什么。

感谢您的任何帮助,

格雷格

4

1 回答 1

1

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

我看到您的问题有两个可能的原因:

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

这些是您的代码段中不可能发生的事情:

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

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

你用:

 cell = new PdfPCell("");

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

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

于 2014-07-04T12:30:06.273 回答