当前位置: 首页 > 知识库问答 >
问题:

表单元格中的大表调用分页符

权浩阔
2023-03-14

我有一个单列的PdfPTable。一页可容纳50行。若我向表中添加一些文本数据(例如,300行),则报告工作正常。当我将PdfPTable添加到单元格中(例如,20个字符串单元格、PdfPTable(其中包含20行或更少)和270个字符串单元格)时,所有这些都可以正常工作:

/--------
20 string rows
inner table (20 rows)
10 string rows
/-------
...additional rows

但是,当我的内部表有更多行时(mainTable[20个字符串行,innerTable[90个字符串行],270个字符串行),报告会中断第一页,并在第二页开始innerTable输出。

/---------
20 string rows
whitespace for 30 rows
/---------
inner table (50 rows from 90)
/---------
inner table (40 rows from 90)
..additional data

我需要这个:

/---------
20 string rows
inner table (30 rows from 90)
/---------
inner table (50 rows from 90)
/---------
inner table (10 rows from 80)
..additional data

有人知道解决方案吗?

ps itext版本-2.1.7

共有1个答案

皇甫心思
2023-03-14

请看一下NestedTables 2示例。在本例中,我们告诉iText,只要一行不适合页面,就可以拆分单元格:

这不是默认设置:默认情况下,iText将通过将行转发到下一页来保持该行的完整性。只有当该行与页面不匹配时,才会拆分该行。

更改默认值需要在代码中添加一行。这一行叫做:<代码>表格。setSplitLate(假)

这是创建屏幕截图中显示的PDF的完整方法:

public void createPdf(String dest) throws IOException, DocumentException {
    Document document = new Document();
    PdfWriter.getInstance(document, new FileOutputStream(dest));
    document.open();
    PdfPTable table = new PdfPTable(2);
    table.setSplitLate(false);
    table.setWidths(new int[]{1, 15});
    for (int i = 1; i <= 20; i++) {
        table.addCell(String.valueOf(i));
        table.addCell("It is not smart to use iText 2.1.7!");
    }
    PdfPTable innertable = new PdfPTable(2);
    innertable.setWidths(new int[]{1, 15});
    for (int i = 0; i < 90; i++) {
        innertable.addCell(String.valueOf(i + 1));
        innertable.addCell("Upgrade if you're a professional developer!");
    }
    table.addCell("21");
    table.addCell(innertable);
    for (int i = 22; i <= 40; i++) {
        table.addCell(String.valueOf(i));
        table.addCell("It is not smart to use iText 2.1.7!");
    }
    document.add(table);
    document.close();
}

请注意,不应使用iText 2.1.7。如果你这样做,你可能会与你的雇主、客户、投资者产生问题。在免费电子书《关于StackOverflow的最佳iText问题》的法律部分了解更多信息

 类似资料:
  • 我正在 JavaFX 应用程序中使用。列表中的项需要的不仅仅是一个字符串来显示它们,因此我自定义了 的< code>ListView,当单元格被重用时,我希望接收一个回调,传递要作为参数呈现的新项。然后,我想使用该项作为模型来构建一个视图-控制器对,我获取该视图并将其用作单元格的< code>graphic。该视图中的按钮和其他控件应该可以工作。这在JavaFX中可能吗? 链接问题: ListVi

  • 在使用Itext的Java项目中,我创建了一个pdf文件,在这个文件中,我在另一个表的单元格中插入了一个较大的表。 我面临的问题是,当表格的内容超过一页时,表格将被带入下一页。相反,我想要上一页中的部分数据,只有超出该页的数据才需要转到下一页。 如何实现这一点,下面是我使用的代码。

  • 问题内容: Test A long string blah blah blah 上面的方法不起作用。如何使用百分比设置表格单元格的最大宽度? 问题答案: 根据CSS 2.1规范中max-width的定义,“’min-width’和’max-width’对表,内联表,表单元格,表列和列组的影响是不确定的。” 因此,您不能直接在td元素上设置最大宽度。 如果只希望第二列最多占用67%,则可以将宽度(对

  • 问题内容: 我想根据第1列中的值给表格单元格上色,如果值不等于第1列中的值,则颜色应为青色,但我的代码不起作用: 问题答案: 是否必须突出显示单元格的决定必须在TableCellRenderer中进行。它不能在JTable中进行。因此,(没有)没有理由要重写JTable中的方法。相反,您可以将列的CellRenderer设置为TableCellRenderer的自己实现。 在此示例中,列2和3接收

  • 问题内容: 我有一张桌子,应该始终占据屏幕高度的一定百分比。大多数行的高度都是固定的,但我有一排应该伸展以填充可用空间。万一该行中单元格的内容超出了所需的高度,我希望使用overflow:hidden剪切内容。 不幸的是,表和行不遵守max-height属性。(这在W3C规范中)。当单元格中的文本过多时,表格将变高,而不是坚持指定的百分比。 如果我为其指定一个固定的高度(以像素为单位),则可以使表

  • 问题内容: 在我的应用程序中,我有一个表格视图,每个单元格中都有一个图像,标签和文本视图。我希望能够根据文本视图中的内容量自动调整单元格的大小。(文本视图是最下面的文本。) 到目前为止,我已经添加了正确的约束。文本视图的前导,尾随,顶部和底部,并且已禁用滚动和编辑。 在我的tableViewController.swift文件中,我编写了以下代码: 但是,这不起作用,因为当我在文本视图中添加更多文