itext7 中的嵌套大表
Nested large tables in itext7
我看到 http://developers.itextpdf.com/examples/tables/clone-large-tables
中解释了在 itext 7 中处理大型 tables 的最佳方法
我在另一个里面有一个 table。如果大 table 是内部的怎么办?
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) 这些行 return Table 对象中的 NullPointerException,第 539 行,因为文档为空。 outTable 的父级是文档,因此 'flush' 方法将数据刷新到文档中,但 innerTable 的父级是 outTable,而不是文档。有没有办法将 innerTable 冲入 outTable 并将 outTable 冲入文档?
如果我将文档设置为内部Table,那么我不会得到 NullPointerException:
innerTable.setDocument(文档);
它的行为不正常,因为现在内部Table被冲入文档,而不是输出Table,它会做一些奇怪的事情。
非常感谢!
遗憾的是,仅当您将大表直接添加到 Document
时才支持大表。不支持内部大表,并且没有计划在不久的将来添加对内部大表的支持。
尝试:
for(int j=0;j<bigArray.size();j++){
//add cells to innerTable;
if (j%20==0){
Cell cellContent = new Cell(1,2).add(innerTable);
outTable.addCell(cellContent);
innerTable.flushContent(); // API says is internal but is public and works OK
outTable.flush();
}
}
我看到 http://developers.itextpdf.com/examples/tables/clone-large-tables
中解释了在 itext 7 中处理大型 tables 的最佳方法我在另一个里面有一个 table。如果大 table 是内部的怎么办?
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) 这些行 return Table 对象中的 NullPointerException,第 539 行,因为文档为空。 outTable 的父级是文档,因此 'flush' 方法将数据刷新到文档中,但 innerTable 的父级是 outTable,而不是文档。有没有办法将 innerTable 冲入 outTable 并将 outTable 冲入文档?
如果我将文档设置为内部Table,那么我不会得到 NullPointerException: innerTable.setDocument(文档);
它的行为不正常,因为现在内部Table被冲入文档,而不是输出Table,它会做一些奇怪的事情。
非常感谢!
遗憾的是,仅当您将大表直接添加到 Document
时才支持大表。不支持内部大表,并且没有计划在不久的将来添加对内部大表的支持。
尝试:
for(int j=0;j<bigArray.size();j++){
//add cells to innerTable;
if (j%20==0){
Cell cellContent = new Cell(1,2).add(innerTable);
outTable.addCell(cellContent);
innerTable.flushContent(); // API says is internal but is public and works OK
outTable.flush();
}
}