【问题标题】:The table width must be greater than zero exception when using nested tables使用嵌套表格时表格宽度必须大于零异常
【发布时间】:2014-08-25 02:14:53
【问题描述】:

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

我不确定我错过了什么。

感谢您的帮助,

格雷格

【问题讨论】:

    标签: nested itext pdfptable


    【解决方案1】:

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

    我发现您的问题有两个可能的原因:

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

    这些是你的 sn-p 中不可能的事情:

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

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

    你使用:

     cell = new PdfPCell("");
    

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

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

    【讨论】:

    • 嗨 Bruno,我刚刚在我的代码中发现了一个错字,我在更改外部表格的宽度而不是设置内部表格的宽度。在我修复后一切正常。感谢您的评论。
    猜你喜欢
    • 2015-08-11
    • 2011-08-28
    • 2012-08-24
    • 2015-02-27
    • 2016-01-23
    • 2017-05-20
    • 1970-01-01
    • 2023-04-06
    相关资源
    最近更新 更多