Манипулирование таблицами в существующих PDF-документах

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

Замена текста внутри ячейки таблицы

Используйте этот пример, когда текст в обнаруженной ячейке должен быть обновлён без перестройки всей таблицы.

  1. Откройте исходный PDF в объекте Document и перейдите к странице с TableAbsorber.
  2. Проверьте, что целевая таблица и фрагменты текста ячеек существуют.
  3. Замените текст в ячейке и сохраните обновлённый документ.
public static void replaceCells(Path inputFile, Path outputFile) {
    try (Document document = new Document(inputFile.toString())) {
        TableAbsorber absorber = new TableAbsorber();
        absorber.visit(document.getPages().get_Item(1));

        if (absorber.getTableList().isEmpty()) {
            throw new IllegalStateException("No tables were found on page 1.");
        }
        if (absorber.getTableList().get(0).getRowList().get(0).getCellList().get(0).getTextFragments().size() == 0) {
            throw new IllegalStateException("The target cell has no text fragments.");
        }

        absorber.getTableList().get(0).getRowList().get(0).getCellList().get(0)
                .getTextFragments().get_Item(1).setText("New Value");
        document.save(outputFile.toString());
    }
}

Замена обнаруженной таблицы новой таблицей

Используйте этот пример, когда оригинальную таблицу следует полностью заменить вновь созданной.

  1. Откройте исходный PDF в объекте Document и обнаружьте таблицы на странице.
  2. Создайте новый Table с желаемой структурой.
  3. Замените поглощённую таблицу и сохраните полученный PDF.
public static void replaceTable(Path inputFile, Path outputFile) {
    try (Document document = new Document(inputFile.toString())) {
        TableAbsorber absorber = new TableAbsorber();
        absorber.visit(document.getPages().get_Item(1));

        if (absorber.getTableList().isEmpty()) {
            throw new IllegalStateException("No tables were found on page 1.");
        }

        AbsorbedTable oldTable = absorber.getTableList().get(0);
        Table newTable = new Table();
        newTable.setColumnWidths("100 100 100");
        newTable.setDefaultCellBorder(new BorderInfo(BorderSide.All, 1.0f));

        Row row = newTable.getRows().add();
        row.getCells().add("Col 1");
        row.getCells().add("Col 2");
        row.getCells().add("Col 3");
        row = newTable.getRows().add();
        row.getCells().add("Col 12");
        row.getCells().add("Col 22");
        row.getCells().add("Col 32");

        absorber.replace(document.getPages().get_Item(1), oldTable, newTable);
        document.save(outputFile.toString());
    }
}