我有一个PdfPTable和一列。一页适合50行。如果我向表中添加一些文本数据(例如,300行),报告工作正常。当我将PdfPTable添加到单元格中时(例如,20个字符串单元格,PdfPTable(其中包含20行或更少)和270个字符串单元格),所有工作都可以正常工作:
/--------
20 string rows
inner table (20 rows)
10 string rows
/-------
...additional rows
但是,当我的内部表有更多行(mainTable [20个字符串行,innerTable [90个字符串行],270个字符串行]时,报告中断第一页,并在第二页上启动innerTable输出。
/---------
20 string rows
whitespace for 30 rows
/---------
inner table (50 rows from 90)
/---------
inner table (40 rows from 90)
..additional data
我需要这个:
/---------
20 string rows
inner table (30 rows from 90)
/---------
inner table (50 rows from 90)
/---------
inner table (10 rows from 80)
..additional data
有人知道解决方案吗?
ps itext version - 2.1.7
答案 0 :(得分:1)
请查看NestedTables2示例。在这个例子中,我们告诉iText,只要一行不适合页面就可以拆分单元格:
这不是默认设置:默认情况下,iText会尝试通过将其转发到下一页来保持行的完整性。只有当行不适合页面时,该行才会被拆分。
更改默认值涉及在代码中添加一行。该行称为:table.setSplitLate(false);
这是创建屏幕截图中显示的PDF的完整方法:
public void createPdf(String dest) throws IOException, DocumentException {
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
PdfPTable table = new PdfPTable(2);
table.setSplitLate(false);
table.setWidths(new int[]{1, 15});
for (int i = 1; i <= 20; i++) {
table.addCell(String.valueOf(i));
table.addCell("It is not smart to use iText 2.1.7!");
}
PdfPTable innertable = new PdfPTable(2);
innertable.setWidths(new int[]{1, 15});
for (int i = 0; i < 90; i++) {
innertable.addCell(String.valueOf(i + 1));
innertable.addCell("Upgrade if you're a professional developer!");
}
table.addCell("21");
table.addCell(innertable);
for (int i = 22; i <= 40; i++) {
table.addCell(String.valueOf(i));
table.addCell("It is not smart to use iText 2.1.7!");
}
document.add(table);
document.close();
}
请注意,您不应使用iText 2.1.7。如果这样做,您的雇主,客户,投资者可能会遇到问题。在免费电子书The Best iText Questions on StackOverflow
的法律部分中了解更多相关信息