Los archivos PDF son un formato estándar para intercambiar documentos a través de Internet. Documentos como facturas y guías de productos se suelen compartir en formato PDF. Puede haber situaciones en las que tenga varias facturas que contengan datos tabulares que necesite extraer y procesar más. Será más eficiente extraer estos datos mediante programación. Con ese fin, este artículo le enseñará cómo extraer datos de tablas PDF usando C++.
- API de C++ para extraer datos de tablas en archivos PDF
- Extraer datos de tablas PDF usando C++
- Extraer datos de una tabla en un área específica de una página PDF
API de C++ para extraer datos de tablas en archivos PDF
Aspose.PDF for C++ es una biblioteca de C++ que le permite crear, leer y actualizar archivos PDF. Además, la API admite la extracción de datos de tablas en archivos PDF. Puede instalar la API a través de NuGet o descargarla directamente desde la sección descargas.
PM> Install-Package Aspose.PDF.Cpp
Extraer datos de tablas PDF usando C++
Los siguientes son los pasos para extraer datos de tablas PDF.
- Cargue el documento PDF usando la clase Document.
- Recorra las páginas del documento usando el método Document->getPages().
- En cada iteración, cree una instancia de la clase TableAbsorber y especifique la página para extraer tablas usando TableAbsorber->Visit(System::SharedPtr página) método.
- Obtenga las tablas usando el método TableAbsorber->getTableList() e itere sobre ellas.
- Para cada AbsorbedTable, repita las filas usando el método AbsorbedTable->getRowList().
- Para cada AbsorbedRow, itere a través de las celdas usando el método AbsorbedRow->getCellList().
- Obtenga TextFragmentCollection para cada AbsorbedCell usando el método AbsorbedCell->getTextFragments() y revíselo.
- Obtenga TextSegmentCollection para cada TextFragment usando el método TextFragment->getSegments() y revíselo.
- Recupera el texto de cada TextSegment e imprímelo.
El siguiente código de ejemplo muestra cómo extraer datos de tablas PDF usando C++.
// Cargue el documento PDF
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Table_input3.pdf");
// Iterar a través de las páginas del documento.
for (auto page : pdfDocument->get_Pages())
{
// Crear una instancia de la clase TableAbsorber
auto absorber = MakeObject<TableAbsorber>();
absorber->Visit(page);
// Iterar a través de las tablas
for (auto table : absorber->get_TableList())
{
Console::WriteLine(u"Table");
// Iterar a través de las filas
for (auto row : table->get_RowList())
{
// Iterar a través de las celdas
for (auto cell : row->get_CellList())
{
// Iterar a través de los fragmentos de texto.
for (auto fragment : cell->get_TextFragments())
{
String string = u"";
// Iterar a través de los segmentos de texto
for (auto seg : fragment->get_Segments())
{
// Obtener el texto
string = String::Concat(string, seg->get_Text());
}
// Imprime el texto
Console::WriteLine(string);
}
}
Console::WriteLine();
}
}
}
Extraer datos de una tabla en un área específica de una página PDF
Para extraer datos de una tabla en un área específica de una página PDF, siga los pasos que se indican a continuación.
- Cargue el documento PDF utilizando la clase Document.
- Recupere la página que contiene la tabla usando el método Document->getPages()->idxget(int32t index).
- Recorra las anotaciones y obtenga la anotación cuadrada.
- Cree una instancia de la clase TableAbsorber y especifique la página para extraer tablas usando TableAbsorber->Visit(System::SharedPtr página) método.
- Obtenga las tablas usando el método TableAbsorber->getTableList() e itere sobre ellas.
- Si la tabla está en la región, realice los siguientes pasos:
- Iterar a través de las filas de AbsorbedTable utilizando el método AbsorbedTable->getRowList().
- Para cada AbsorbedRow, itere a través de las celdas usando el método AbsorbedRow->getCellList().
- Obtenga TextFragmentCollection para cada AbsorbedCell usando el método AbsorbedCell->getTextFragments() y revíselo.
- Obtenga TextSegmentCollection para cada TextFragment usando el método TextFragment->getSegments() y revíselo.
- Recupera el texto de cada TextSegment e imprímelo.
El siguiente código de ejemplo demuestra cómo extraer datos de una tabla en un área específica de una página PDF usando C++.
// Cargue el documento PDF
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Table_input4.pdf");
// Obtener la primera página del documento
auto page = pdfDocument->get_Pages()->idx_get(1);
// Iterar a través de las anotaciones en la página
for (auto annotation : page->get_Annotations())
{
// Comprobar el tipo de anotación
if (annotation->get_AnnotationType() == Annotations::AnnotationType::Square)
{
System::SharedPtr<SquareAnnotation> squareAnnotation = DynamicCast<SquareAnnotation>(annotation);
// Crear una instancia de la clase TableAbsorber
auto absorber = MakeObject<TableAbsorber>();
absorber->Visit(page);
// Iterar a través de las tablas
for (auto table : absorber->get_TableList())
{
// Comprobar si la tabla está en la región
if ((squareAnnotation->get_Rect()->get_LLX() < table->get_Rectangle()->get_LLX()) &&
(squareAnnotation->get_Rect()->get_LLY() < table->get_Rectangle()->get_LLY()) &&
(squareAnnotation->get_Rect()->get_URX() > table->get_Rectangle()->get_URX()) &&
(squareAnnotation->get_Rect()->get_URY() > table->get_Rectangle()->get_URY())
)
{
// Iterar a través de las filas
for (auto row : table->get_RowList())
{
// Iterar a través de las celdas
for (auto cell : row->get_CellList())
{
// Iterar a través de los fragmentos de texto.
for (auto fragment : cell->get_TextFragments())
{
String string = u"";
// Iterar a través de los segmentos de texto
for (auto seg : fragment->get_Segments())
{
// Obtener el texto
string = String::Concat(string, seg->get_Text());
}
// Imprime el texto
Console::WriteLine(string);
}
}
Console::WriteLine();
}
}
}
break;
}
}
Obtenga una licencia gratis
Para probar la API sin limitaciones de evaluación, puede solicitar una licencia temporal gratuita.
Conclusión
En este artículo, ha aprendido a extraer datos de tablas PDF usando C++. Además, ha aprendido a extraer datos de una tabla en una región específica de la página PDF. Aspose.PDF for C++ proporciona muchas funciones adicionales para trabajar con archivos PDF. Puede explorar la API en detalle visitando la documentación oficial. Si tiene alguna pregunta, no dude en comunicarse con nosotros en nuestro foro de soporte gratuito.