【问题标题】:Stop iText table from spliting on new page阻止 iText 表格在新页面上拆分
【发布时间】:2015-10-22 17:18:10
【问题描述】:

我正在为生成pdf 的android 开发应用程序。

我正在使用itextpdf 生成pdf。

我有以下问题:

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

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

谢谢

【问题讨论】:

  • 请阅读有关如何提出好问题并发布代码的部分。
  • 我理解这个问题。这是一个很容易回答的明确的技术问题。我会开始写答案。

标签: java android android-tablelayout itextpdf


【解决方案1】:

作为 Bruno 将表格嵌套在 1 单元格表格中以防止拆分的方法的替代方法,您还可以使用 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 行时。

【讨论】:

    【解决方案2】:

    请查看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 会将完整的表格转发到下一页。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-13
      • 1970-01-01
      • 1970-01-01
      • 2017-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-06
      相关资源
      最近更新 更多