我正在尝试使用itext v5.5.3创建一个包含大表的pdf .
我需要 :
-
内存管理
-
重复 Headers (1行)
-
禁用行拆分
使用下面的代码,一切正常:
Document document = new Document(PageSize.LETTER);
PdfWriter.getInstance(document, baos);
document.open();
PdfPTable table = new PdfPTable(5);
table.setHeaderRows(1);
//table.setSplitRows(false);
//table.setComplete(false);
for (int i = 0; i < 5; i++) {table.addCell("Header " + i);}
for (int i = 0; i < 500; i++) {
table.addCell("Test " + i);
//if (i%5 == 0) {document.add(table);}
}
//table.setComplete(true);
document.add(table);
document.close();
如果我添加内存管理(每5个单元格添加一个表格),我将失去第一个 Headers :
Document document = new Document(PageSize.LETTER);
PdfWriter.getInstance(document, baos);
document.open();
PdfPTable table = new PdfPTable(5);
table.setHeaderRows(1);
//table.setSplitRows(false);
table.setComplete(false);
for (int i = 0; i < 5; i++) {table.addCell("Header " + i);}
for (int i = 0; i < 500; i++) {
table.addCell("Test " + i);
if (i%5 == 0) {document.add(table);}
}
table.setComplete(true);
document.add(table);
document.close();
如果我添加内存管理setSplitRows(false),我会丢失所有 Headers 和一些行:
Document document = new Document(PageSize.LETTER);
PdfWriter.getInstance(document, baos);
document.open();
PdfPTable table = new PdfPTable(5);
table.setHeaderRows(1);
table.setSplitRows(false);
table.setComplete(false);
for (int i = 0; i < 5; i++) {table.addCell("Header " + i);}
for (int i = 0; i < 500; i++) {
table.addCell("Test " + i);
if (i%5 == 0) {document.add(table);}
}
table.setComplete(true);
document.add(table);
document.close();
我做了一些测试,使用itext版本2.1.7.js2,所有三个测试用例都正常工作 .
那么,bug还是没有bug?我该怎么做才能使这个工作?
谢谢
2 回答
这确实是回归,所以我在iText库中添加了一个针对此问题的修复程序 . (修订版6630) .
它将包含在5.5.4版本中,该版本将在两到三周内发布 .
如果您更换,您的问题不会出现
通过
这个问题的明显原因是iText不希望包含只有 Headers 和一个部分行的表 . 目前这是一种解决方法,但我们正在寻找核心问题并进行修复 .