Как создать таблицу 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!"));