阻止 iText table 在新页面上拆分
Stop iText table from spliting on new page
我正在为 android 开发一个生成 pdf
.
的应用程序
我正在使用 itextpdf
生成 pdf。
我有以下问题:
我有一个有 3 行的 table,当这个 table 接近页面末尾时,有时它会在一页上放一行,在下一页放两行。
有没有办法强制这个 table 从下一页开始,这样我就可以在下一页看到完整的 table?
谢谢
请看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 行的 table,在本例中,我们要添加一些段落,以便在页面末尾添加 table。
默认情况下,iText 将尽量不拆分行,但如果完整 table 不适合,它会将不适合的行转发到下一页:
您想避免这种行为:您不希望 table 拆分。
知道 iText 会尽量保持完整的行,您可以通过嵌套您不想拆分的 table 另一个 table:
来解决这个问题
PdfPTable nesting = new PdfPTable(1);
PdfPCell cell = new PdfPCell(table);
cell.setBorder(PdfPCell.NO_BORDER);
nesting.addCell(cell);
document.add(nesting);
现在你得到这个结果:
上一页的 space 足以渲染几行,但由于我们将完整的 table 包裹在一行中,只有一列,iText 将转发完整的table 翻到下一页。
作为 Bruno 将 table 嵌套在 1-cell table 中以防止分裂的方法的替代方法,您还可以使用 PdfPTable.setKeepTogether(true)
来启动 table当它不适合当前页面时在新页面上。
使用类似的例子:
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 单元 table 中并使用 setKeepTogether()
)在我的测试中表现完全相同。这包括 table 太大而不适合新页面并且仍需要拆分的情况,例如在上面的示例中添加 50 行而不是 5 行时。
我正在为 android 开发一个生成 pdf
.
我正在使用 itextpdf
生成 pdf。
我有以下问题:
我有一个有 3 行的 table,当这个 table 接近页面末尾时,有时它会在一页上放一行,在下一页放两行。
有没有办法强制这个 table 从下一页开始,这样我就可以在下一页看到完整的 table?
谢谢
请看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 行的 table,在本例中,我们要添加一些段落,以便在页面末尾添加 table。
默认情况下,iText 将尽量不拆分行,但如果完整 table 不适合,它会将不适合的行转发到下一页:
您想避免这种行为:您不希望 table 拆分。
知道 iText 会尽量保持完整的行,您可以通过嵌套您不想拆分的 table 另一个 table:
来解决这个问题PdfPTable nesting = new PdfPTable(1);
PdfPCell cell = new PdfPCell(table);
cell.setBorder(PdfPCell.NO_BORDER);
nesting.addCell(cell);
document.add(nesting);
现在你得到这个结果:
上一页的 space 足以渲染几行,但由于我们将完整的 table 包裹在一行中,只有一列,iText 将转发完整的table 翻到下一页。
作为 Bruno 将 table 嵌套在 1-cell table 中以防止分裂的方法的替代方法,您还可以使用 PdfPTable.setKeepTogether(true)
来启动 table当它不适合当前页面时在新页面上。
使用类似的例子:
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 单元 table 中并使用 setKeepTogether()
)在我的测试中表现完全相同。这包括 table 太大而不适合新页面并且仍需要拆分的情况,例如在上面的示例中添加 50 行而不是 5 行时。