当我尝试将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
&#34;定义哪些行不允许分页(如果可能)。&#34;这向我表明,第七行(不包含在数组中)应允许分页。
有没有人有任何想法如何保持第七行不会被转移到下一页,当它绝对适合第一行?
解决方案:在与布鲁诺交谈之后,我意识到我误解了keepRowsTogether
是如何运作的。对于上面的示例,我需要做的就是将table.keepRowsTogether(new int[] { 8, 9 });
更改为table.keepRowsTogether(9)
。
答案 0 :(得分:1)
我认为对keepRowsTogether()
的含义存在误解。如果您使用:
table.keepRowsTogether(new int[] { 8, 9 });
您表示该表不会在第8行或第9行拆分。这与我看到的一致。
也许你想要这样的东西:split_at_row.pdf
此PDF是使用SplitRowAtSpecificRow创建的。它不使用keepRowsTogether()
,而是使用:
table.setBreakPoints(8);
这意味着iText将优先在第8行之后拆分表(从0开始计数)。您可以引入多个断点。例如:
table.setBreakPoints(4, 8, 12);