Extraer Datos de Tabla de PDF

Extraer Tablas de PDF programáticamente

Extraer tablas de PDF no es una tarea trivial porque la tabla puede ser creada de diversas maneras.

Aspose.PDF para PHP vía Java tiene una herramienta para facilitar la recuperación de tablas. Para extraer datos de tabla, debe realizar los siguientes pasos:

  1. Abrir el documento PDF - instanciar un objeto Document;

  2. Crear un objeto TableAbsorber TableAbsorber para extraer tablas del documento.

  3. Iterar a través de cada página del documento.

  4. Decida qué páginas se analizarán y aplique visit a las páginas deseadas. Los datos tabulares serán escaneados y el resultado se guardará en una lista de AbsorbedTable. Podemos obtener esta lista a través del método getTableList.

  5. Para obtener los datos, itere a través de TableList y maneje la lista de filas absorbidas y la lista de celdas absorbidas. Podemos acceder a la primera lista llamando al método getTableList y a la segunda llamando al método getCellList.

  6. Cada AbsorbedCell contiene TextFragmentCollections. Puedes procesarlo para tus propios fines.

El siguiente ejemplo muestra la extracción de una tabla de todas las páginas:


$document = new Document($inputFile);
$tableAbsorber = new TableAbsorber();


for ($pageIndex = 1; $pageIndex <= java_values($pages->size()); $pageIndex++) {
    $page = $pages->get_Item($pageIndex);
    $tableAbsorber->visit($page);
    $tableList = $tableAbsorber->getTableList();
    $tableIterator = $tableList->iterator();

    while (java_values($tableIterator->hasNext())) {
        $table = $tableIterator->next();
        $tableRowList = $table->getRowList();
        $tableRowListIterator = $tableRowList->iterator();

        while (java_values($tableRowListIterator->hasNext())) {
            $row = $tableRowListIterator->next();
            $cellList = $row->getCellList();
            $cellListIterator = $cellList->iterator();

            // Iterar a través de cada celda en la fila.
            while (java_values($cellListIterator->hasNext())) {
                $cell = $cellListIterator->next();
                $fragmentList = $cell->getTextFragments();

                // Iterar a través de cada fragmento de texto en la celda.
                for ($fragmentIndex = 1; $fragmentIndex <= java_values($fragmentList->size()); $fragmentIndex++) {
                    $fragment = $fragmentList->get_Item($fragmentIndex);
                    $segments = $fragment->getSegments();

                    // Iterar a través de cada segmento en el fragmento de texto.
                    for ($segmentIndex = 1; $segmentIndex <= java_values($segments->size()); $segmentIndex++) {
                        $segment = $segments->get_Item($segmentIndex);
                        $responseData .= $segment->getText();
                    }
                }
                $responseData .= "|";
            }
            $responseData .= PHP_EOL;
        }
    }
}

// Guardar los datos de la tabla en el archivo de salida.
file_put_contents($outputFile, $responseData);

// Cerrar el documento PDF.
$document->close();

Extraer datos de tabla de PDF y almacenarlos en un archivo CSV

El siguiente ejemplo muestra cómo extraer una tabla y almacenarla como un archivo CSV. Para ver cómo convertir PDF a hoja de cálculo de Excel, por favor consulte el artículo Convertir PDF a Excel.


    // Cargar el documento PDF de entrada usando la clase Document.
    $document = new Document($inputFile);

    // Crear una instancia de la clase ExcelSaveOptions para especificar las opciones de guardado.
    $saveOption = new ExcelSaveOptions();

    // Establecer el formato de salida a CSV.
    $saveOption->setFormat(ExcelSaveOptions_ExcelFormat::$CSV);

    // Guardar el documento PDF como un archivo de Excel usando las opciones de guardado especificadas.
    $document->save($outputFile, $saveOption);