我正在为Android开发一个生成pdf
的应用程序。
我正在使用itextpdf
生成pdf。
我有以下问题:
我有一个有3行的表,当这个表靠近页面的末尾时,有时会在一页上放一行,在下一页放两行。
有没有办法强制这个表在下一页开始,所以我可以在下一页上有完整的表格?
由于
答案 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会尝试不拆分行,但如果整张表不合适,它会转发不适合下一页的行:
您希望避免此行为:您不希望表拆分。
知道iText会尝试保持完整的行不变,你可以通过嵌套你不希望在另一个表中拆分的表来解决这个问题:
PdfPTable nesting = new PdfPTable(1);
PdfPCell cell = new PdfPCell(table);
cell.setBorder(PdfPCell.NO_BORDER);
nesting.addCell(cell);
document.add(nesting);
现在你得到了这个结果:
上一页上有足够的空间来渲染几行,但是当我们将整个表包装在一行中时,iText会将整个表格转发到下一页。