当我尝试将 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 文档,
keepRowsTogether
“定义哪些行不应允许分页符(如果可能)。” 这向我表明,不包含在数组中的第七行应该允许分页符。
有没有人知道如何防止第七行在绝对适合第一行时被带到下一页?
解决方案:与布鲁诺交谈后,我意识到我误解了它keepRowsTogether
的工作原理。对于上面的示例,我需要做的就是更改table.keepRowsTogether(new int[] { 8, 9 });
为table.keepRowsTogether(9)
.