Manipular tablas en documentos PDF existentes

Utilice TableAbsorber cuando necesites localizar tablas existentes y actualizar su contenido.

Reemplazar texto dentro de una celda de tabla

Utilice este ejemplo cuando el texto en una celda detectada deba actualizarse sin reconstruir toda la tabla.

  1. Abra el PDF de origen Document y visite la página con TableAbsorber.
  2. Valide que la tabla objetivo y los fragmentos de texto de la celda existan.
  3. Reemplace el texto de la celda y guarde el documento actualizado.
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());
    }
}

Reemplazar una tabla detectada por una tabla nueva

Utilice este ejemplo cuando la tabla original deba ser reemplazada completamente por una recién construida.

  1. Abra el PDF de origen Document y detecte tablas en la página.
  2. Cree una nueva Table con la estructura deseada.
  3. Reemplace la tabla absorbida y guarde el PDF de salida.
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());
    }
}