【问题标题】:How to create a itext table having cells at user specified positions如何创建在用户指定位置具有单元格的 itext 表
【发布时间】:2021-05-25 18:51:20
【问题描述】:

我需要在 iText PDF 表格中添加图像,但单元格的位置(由图像组成)将取决于用户给出的索引(行号和列号)。如果没有为任何图像提供索引,则此表之间也可能有空单元格。

如何在itext pdf中随机添加一个单元格?

我在各种论坛上寻找过这个,但没有成功。我真的很感谢您的帮助。

【问题讨论】:

  • 如果您想在用户指定的位置添加内容,则不需要表格或单元格。
  • 你说的是在绝对位置添加内容吗?我需要使用 Canvas/Rectangle 或 iTextPdf 中的任何其他 api 吗?
  • “你说的是在绝对位置添加内容吗?” - 这就是我对你的问题标题的理解。这不是你想要的吗?
  • 不是绝对位置,而是在特定的行号和列号。这实际上是通过自定义逻辑来实现的,即在一行数据中的所需单元格之前添加所需数量的空单元格/行。

标签: itext7 pdftables


【解决方案1】:

iText 的Table 类中没有用于将单元格添加到任意位置的 API。这种决定背后的原因在于 iText 的Table 架构:如果尚未构建表格(即不知道是否会有某些单元格的 rowpan 和/或 colpan 大于 1),则 iText 不可行知道它是否可以在某个自定义位置放置一个单元格。

不过,好消息是所有布局相关的代码只有在表格添加到文档后才会触发。所以,人们总是可以做到以下几点:

  • 创建表
  • 用一些预先保存的空Cell对象填充它
  • 根据要求更改一些 Cell 对象
  • 将表格添加到文档中

在上面我将展示的 sn-p 中,在将单元格添加到表格后,热添加一些对角线内容到表格中。图像也可以采用相同的方法。

        int numberOfRows = 3;
    int numberOfColumns = 3;
    Table table = new Table(numberOfColumns);
    List<List<Cell>> cells = new ArrayList<>();
    for (int i = 0; i < numberOfRows; i++) {
        List<Cell> row = new ArrayList<>();
        for (int j = 0; j < numberOfColumns; j++) {
            Cell cell = new Cell();
            row.add(cell);
            table.addCell(cell);

        }
        cells.add(row);
    }

    // Add some text diagonally
    cells.get(0).get(0).add(new Paragraph("Hello"));
    cells.get(1).get(1).add(new Paragraph("diagonal"));
    cells.get(2).get(2).add(new Paragraph("world!"));

生成的 PDF 如下所示:

【讨论】:

  • 谢谢,它有点接近我的要求,并给了我想要实现我的要求的想法。为了实现这一点,我在一行中的所需单元格之前添加了所需数量的空单元格/行。
猜你喜欢
  • 2019-10-22
  • 2018-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多