2

当我尝试将 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).

4

1 回答 1

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);
于 2014-07-10T13:31:16.233 回答