Manipular Tablas en un PDF existente

Manipular tablas en un PDF existente

Aspose.PDF para C++ le permite trabajar rápida y eficientemente con tablas, a saber, crearlas desde cero o añadirlas a documentos PDF existentes.

También obtiene la capacidad de integrar la tabla con la base de datos (DOM) para crear tablas dinámicas basadas en el contenido de la base de datos.

La clase Aspose.PDF.Text.TableAbsorber le permite buscar y analizar tablas simples que ya existen en una página de un documento PDF. El siguiente fragmento de código muestra los pasos para actualizar el contenido en una celda específica en una tabla.

Encabezados:

#include <system/date_time.h>
#include <system/io/file.h>
#include <system/console.h>
#include <data/data_table.h>
#include <data/data_column_collection.h>
#include <system/type_info.h>

#include <Aspose.PDF.Cpp/Document.h>
#include <Aspose.PDF.Cpp/Page.h>
#include <Aspose.PDF.Cpp/PageCollection.h>
#include <Aspose.PDF.Cpp/Generator/BorderInfo.h>
#include <Aspose.PDF.Cpp/Generator/BorderSide.h>

#include <Aspose.PDF.Cpp/Text/TextFragment.h>
#include <Aspose.PDF.Cpp/Text/TextFragmentCollection.h>

#include <Aspose.PDF.Cpp/Color.h>

#include <Aspose.PDF.Cpp/Table/Table.h>
#include <Aspose.PDF.Cpp/Table/Row.h>
#include <Aspose.PDF.Cpp/Table/Rows.h>
#include <Aspose.PDF.Cpp/Table/Cell.h>
#include <Aspose.PDF.Cpp/Table/Cells.h>
#include <Aspose.PDF.Cpp/Text/TableAbsorber/TableAbsorber.h>
#include <Aspose.PDF.Cpp/Text/TableAbsorber/AbsorbedTable.h>
#include <Aspose.PDF.Cpp/Text/TableAbsorber/AbsorbedRow.h>
#include <Aspose.PDF.Cpp/Text/TableAbsorber/AbsorbedCell.h>

Samples:

using namespace System;
using namespace Aspose::Pdf;

#include "Table-Manipulate.h"

void ManipulateTables() {

    String _dataDir("C:\\Samples\\");

    // Cargar archivo PDF existente
    auto document = MakeObject<Document>(_dataDir + u"input.pdf");

    // Crear objeto TableAbsorber para encontrar tablas
    auto absorber = MakeObject<Aspose::Pdf::Text::TableAbsorber>();

    // Visitar la primera página con el absorber
    absorber->Visit(document->get_Pages()->idx_get(1));

    // Obtener acceso a la primera tabla en la página, su primera celda y fragmentos de texto en ella
    auto fragment = absorber->get_TableList()->idx_get(0)->get_RowList()->idx_get(0)->get_CellList()->idx_get(0)->get_TextFragments()->idx_get(1);

    // Cambiar el texto del primer fragmento de texto en la celda
    fragment->set_Text(u"hola mundo");
    document->Save(_dataDir + u"ManipulateTable_out.pdf");
}

Reemplazar una tabla antigua con una nueva en el documento PDF

En caso de que necesites encontrar una tabla en particular y reemplazarla por la deseada, puedes usar el método Replace() de la Clase TableAbsorber para hacerlo.

El siguiente ejemplo demuestra la funcionalidad para reemplazar la tabla dentro del documento PDF:

void ReplaceOldTable() {
    String _dataDir("C:\\Samples\\");

    // Cargar archivo PDF existente
    auto document = MakeObject<Document>(_dataDir + u"Table_input2.pdf");

    // Crear objeto TableAbsorber para encontrar tablas
    auto absorber = MakeObject<Aspose::Pdf::Text::TableAbsorber>();

    // Visitar la primera página con el absorbedor
    absorber->Visit(document->get_Pages()->idx_get(1));

    // Obtener la primera tabla en la página
    auto table = absorber->get_TableList()->idx_get(0);

    // Crear nueva tabla
    auto newTable = MakeObject<Table>();
    newTable->set_ColumnWidths(u"100 100 100");
    newTable->set_DefaultCellBorder (MakeObject<BorderInfo>(BorderSide::All, 1.0F));

    auto row = newTable->get_Rows()->Add();
    row->get_Cells()->Add(u"Col 1");
    row->get_Cells()->Add(u"Col 2");
    row->get_Cells()->Add(u"Col 3");

    // Reemplazar la tabla con la nueva
    absorber->Replace(document->get_Pages()->idx_get(1), table, newTable);

    // Guardar documento
    document->Save(_dataDir + u"TableReplaced_out.pdf");
}