iText 5.5.1中的Table.keepRowsTogether()似乎无法正常工作

时间:2014-07-09 23:17:46

标签: java itext itextpdf

当我尝试将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添加了数组,看到前八行留在一页上,最后两行留在下一页但不是这样的情况由下面的示例图片显示。相反,第七行(从零开始计算)也会转移到下一页。

enter image description here enter image description here 根据找到的API文档herekeepRowsTogether&#34;定义哪些行不允许分页(如果可能)。&#34;这向我表明,第七行(不包含在数组中)应允许分页。

有没有人有任何想法如何保持第七行不会被转移到下一页,当它绝对适合第一行?

解决方案:在与布鲁诺交谈之后,我意识到我误解了keepRowsTogether是如何运作的。对于上面的示例,我需要做的就是将table.keepRowsTogether(new int[] { 8, 9 });更改为table.keepRowsTogether(9)

1 个答案:

答案 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);