阻止iText表在新页面上拆分

时间:2015-10-22 17:18:10

标签: java android android-tablelayout itextpdf

我正在为Android开发一个生成pdf的应用程序。

我正在使用itextpdf生成pdf。

我有以下问题:

我有一个有3行的表,当这个表靠近页面的末尾时,有时会在一页上放一行,在下一页放两行。

有没有办法强制这个表在下一页开始,所以我可以在下一页上有完整的表格?

由于

2 个答案:

答案 0 :(得分:11)

作为Bruno将表嵌套在单元格表中以防止拆分的方法的替代方法,您还可以使用PdfPTable.setKeepTogether(true)在新页面不适合当前页面时启动表格。

使用类似的例子:

Paragraph p = new Paragraph("Test");
PdfPTable table = new PdfPTable(2);
for (int i = 1; i < 6; i++) {
    table.addCell("key " + i);
    table.addCell("value " + i);
}
for (int i = 0; i < 40; i++) {
    document.add(p);
}
// Try to keep the table on 1 page
table.setKeepTogether(true);
document.add(table);

这两种方法(嵌套在1个单元格的表中并使用setKeepTogether())在我的测试中表现完全相同。这包括当表格太大而不适合新页面并且仍然需要拆分时,例如在上面的示例中添加50而不是5行。

答案 1 :(得分:4)

请查看Splitting示例:

Paragraph p = new Paragraph("Test");
PdfPTable table = new PdfPTable(2);
for (int i = 1; i < 6; i++) {
    table.addCell("key " + i);
    table.addCell("value " + i);
}
for (int i = 0; i < 40; i++) {
    document.add(p);
}
document.add(table);

我们有一个包含5行的表格,在这种情况下,我们会添加一些段落,以便在页面末尾添加表格。

默认情况下,iText会尝试不拆分行,但如果整张表不合适,它会转发不适合下一页的行:

enter image description here

您希望避免此行为:您不希望表拆分。

知道iText会尝试保持完整的行不变,你可以通过嵌套你不希望在另一个表中拆分的表来解决这个问题:

PdfPTable nesting = new PdfPTable(1);
PdfPCell cell = new PdfPCell(table);
cell.setBorder(PdfPCell.NO_BORDER);
nesting.addCell(cell);
document.add(nesting);

现在你得到了这个结果:

enter image description here

上一页上有足够的空间来渲染几行,但是当我们将整个表包装在一行中时,iText会将整个表格转发到下一页。