当我尝试将iText表中的行保持在一起时,我得到了意外的结果。下面是一些独立的代码,它们使用我看到的结果创建PDF。
FileOutputStream out = new FileOutputStream(new File("table.pdf"));
Document document = new Document(new Rectangle(612, 242));
PdfWriter.getInstance(document, out);
document.open();
PdfPTable table = new PdfPTable(1);
table.setWidthPercentage(100);
for (int i = 0; i < 10; i++) {
PdfPCell cell;
if (i == 9) {
cell = new PdfPCell(new Phrase("Two\nLines"));
}
else {
cell = new PdfPCell(new Phrase(Integer.toString(i)));
}
table.addCell(cell);
}
table.keepRowsTogether(new int[] { 8, 9 });
document.add(table);
document.close();
该示例创建的表太小两个像素而无法容纳在第一页上,从而迫使最后一行进入下一页。但是,由于我使用
keepRowsTogether
添加了数组,因此我希望看到前八行保留在一页上,而后两行保留在下一页上,但是如示例所示,情况并非如此下图。而是将第七行(从零开始计数)也结转到下一页。根据找到的API文档here,
keepRowsTogether
“定义哪些行不应允许分页符(如果可能)。”这向我表明,数组中未包含的第七行应允许分页。没有人有任何想法,当第七行绝对适合第一页时,如何防止其移至下一页?
解决方案:与Bruno交谈后,我意识到我误解了
keepRowsTogether
的工作原理。对于上面的示例,我要做的就是将table.keepRowsTogether(new int[] { 8, 9 });
更改为table.keepRowsTogether(9)
。 最佳答案
我认为keepRowsTogether()
的含义存在误解。如果您使用:
table.keepRowsTogether(new int[] { 8, 9 });
您指示该表不会在第8或9行拆分。这与我看到的一致。
也许您想要这样的东西:split_at_row.pdf
使用SplitRowAtSpecificRow创建此PDF。代替
keepRowsTogether()
,它使用:table.setBreakPoints(8);
这意味着iText将优先选择在第8行(从0开始计数)之后拆分表。您可以引入多个断点。例如:
table.setBreakPoints(4, 8, 12);