Как создать таблицу itext с ячейками в указанных пользователем позициях

У меня есть требование добавить изображения в таблицу iText PDF, но положение ячеек (состоящих из изображений) будет зависеть от индексов (номеров строк и столбцов), заданных пользователем. В этой таблице также могут быть пустые ячейки между ними, если не указан индекс для какого-либо изображения.

Как добавить ячейку в itext pdf в случайном месте?

Я высматривал это на различных форумах, но безуспешно. Я бы очень признателен за помощь.

1 ответ

В классе iText нет API для добавления ячейки в произвольную позицию. Причина такого решения кроется в iText. Table архитектура: если таблица еще не построена (т.е. неизвестно, будут ли какие-то ячейки с панелью строк и / или colpan больше 1), для iText невозможно узнать, может ли он разместить ячейку в какой-либо настраиваемой позиции .

Однако хорошая новость заключается в том, что весь связанный с макетом код запускается только после добавления таблицы в документ. Итак, всегда можно сделать следующее:

  • создать таблицу
  • заполните его некоторыми предварительно сохраненными пустыми объектами
  • изменить некоторые Cell объект по запросу
  • добавить таблицу в документ

В приведенном выше фрагменте я покажу, как можно добавить в таблицу диагональный контент после того, как в нее были добавлены ячейки. Тот же подход можно использовать для изображений.

              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-файл выглядит следующим образом:

Другие вопросы по тегам