我已经看到在http://developers.itextpdf.com/examples/tables/clone-large-tables中解释了在itext 7中处理大型表的最佳方法

我在另一个里面有一张桌子。如果大桌子是内部桌子怎么办?

Table outTable = new Table(new float[]{1f},true);

Cell cellHeader1 = new Cell();
cellHeader1.add(new Paragraph("Header 1").addStyle(style));
outTable.addHeaderCell(cellHeader1);

document.add(outTable);

for (int i=0; i<smallArray.size();i++) {
    Table innerTable = new Table(new float[]{0.5f,0.5f},true);
    Cell cellHeader2 = new Cell(1,2);
    cellHeader2.add(new Paragraph("Header 2").addStyle(style));
    innerTable.addHeaderCell(cellHeader2);

    Cell cellInnerTable = new Cell();
    cellInnerTable.add(innerTable);
    outTable.addCell(cellInnerTable);

    for(int j=0;j<bigArray.size();j++){
        //add cells to innerTable;
        if (j%20==0){
            innerTable.flush();  (1)
            outTable.flush(); (2)
        }
    }

    innerTable.complete(); (1)
}
outTable.complete();


(2)刷新不能解决内存问题。

(1)这些行在Table对象的第539行中返回NullPointerException,因为document为null。 outTable的父级是文档,因此'flush'方法将数据刷新到文档中,但是innerTable的父级是outTable,而不是文档。有没有一种方法可以将innerTable刷新到ou​​tTable中,并将outTable刷新到文档中?

如果我将文档设置为innerTable,则不会得到NullPointerException:
innerTable.setDocument(document);

它的行为不尽如人意,因为现在将innerTable刷新到文档中,而不是outTable中,并且这样做很奇怪。

非常感谢你!

最佳答案

不幸的是,只有将大型表直接添加到Document时,才支持大型表。不支持内部大表,也没有计划在不久的将来添加对内部大表的支持。

09-25 16:48