PDF se ha convertido en uno de los formatos de documentos más utilizados en multitud de campos. En varios casos, se utiliza para generar facturas donde los datos parecen estar en forma tabular. En tales casos, es posible que deba analizar el PDF para leer los datos de las tablas mediante programación. Para lograr esto, el artículo cubre cómo extraer datos de tablas PDF usando C#.
- API de C# para extraer tablas PDF
- Extraer datos de tablas PDF en C#
- Extraer tabla de un área específica de la página
API de C# para extraer tablas de PDF
Para extraer datos de las tablas en archivos PDF, utilizaremos Aspose.PDF for .NET. Es una potente API que proporciona una amplia gama de funciones de manipulación de PDF. Puede descargar la API o instalarla mediante NuGet.
PM> Install-Package Aspose.PDF
Extraer datos de tablas PDF en C#
Los siguientes son los pasos para extraer datos de tablas en un PDF usando C#.
- Cargue el documento PDF usando la clase Document.
- Recorra las páginas en PDF usando la colección Document.Pages.
- En cada iteración, inicialice el objeto TableAbsorber y visite la página seleccionada utilizando el método TableAbsorber.Visit(Page).
- En un bucle anidado, recorre la lista de tablas en la colección TableAbsorber.TableList.
- Para cada AbsorbedTable en la colección, itere a través de la colección de filas en AbsorbedTable.RowList.
- Para cada AbsorbedRow en la colección, itere a través de la colección de celdas en AbsorbedRow.CellList.
- Finalmente, recorra la colección TextFragments de cada AbsorbedCell e imprima el texto.
El siguiente ejemplo de código muestra cómo extraer texto de una tabla PDF en C#.
// Cargar documento PDF de origen
Aspose.Pdf.Document pdfDocument = new Aspose.Pdf.Document("sample.pdf");
// Bucle a través de las páginas
foreach (var page in pdfDocument.Pages)
{
// Cree una tabla absorbente y visite la página
Aspose.Pdf.Text.TableAbsorber absorber = new Aspose.Pdf.Text.TableAbsorber();
absorber.Visit(page);
// Bucle a través de cada tabla absorbida
foreach (AbsorbedTable table in absorber.TableList)
{
Console.WriteLine("Table");
// Recorra cada fila de la tabla
foreach (AbsorbedRow row in table.RowList)
{
// Bucle a través de cada celda en la fila
foreach (AbsorbedCell cell in row.CellList)
{
// Bucle a través de los fragmentos de texto
foreach (TextFragment fragment in cell.TextFragments)
{
var sb = new StringBuilder();
foreach (TextSegment seg in fragment.Segments)
sb.Append(seg.Text);
Console.Write($"{sb.ToString()}|");
}
}
Console.WriteLine();
}
}
}
Extraer tabla de un área específica de la página
Los siguientes son los pasos para extraer una tabla de una parte específica de la página en un PDF usando C#.
- Cargue el documento PDF utilizando la clase Document.
- Seleccione la Página deseada de la colección Documento.Páginas.
- Extraiga la anotación Cuadrada de la página.
- Inicialice el objeto TableAbsorber y visite la página usando el método TableAbsorber.Visit(Page).
- En un bucle anidado, recorre la lista de tablas en la colección TableAbsorber.TableList.
- Si la tabla está en la región, realice los siguientes pasos.
- Iterar a través de la colección de filas en AbsorbedTable.RowList.
- Para cada AbsorbedRow en la colección, itere a través de la colección de celdas en AbsorbedRow.CellList.
- Finalmente, recorra la colección TextFragments de cada AbsorbedCell e imprima el texto.
El siguiente ejemplo de código muestra cómo extraer una tabla de una región específica de la página PDF.
// Cargar documento PDF de origen
Aspose.Pdf.Document pdfDocument = new Aspose.Pdf.Document("sample.pdf");
// Seleccione la página y extraiga su anotación cuadrada.
var page = pdfDocument.Pages[1];
var squareAnnotation =
page.Annotations.FirstOrDefault(ann => ann.AnnotationType == Annotations.AnnotationType.Square)
as Annotations.SquareAnnotation;
// Crear mesa absorbente y visitar la página
Aspose.Pdf.Text.TableAbsorber absorber = new Aspose.Pdf.Text.TableAbsorber();
absorber.Visit(page);
// Recorra cada tabla absorbida en la lista
foreach (AbsorbedTable table in absorber.TableList)
{
var isInRegion = (squareAnnotation.Rect.LLX < table.Rectangle.LLX) &&
(squareAnnotation.Rect.LLY < table.Rectangle.LLY) &&
(squareAnnotation.Rect.URX > table.Rectangle.URX) &&
(squareAnnotation.Rect.URY > table.Rectangle.URY);
if (isInRegion)
{
// Bucle a través de cada fila de la tabla
foreach (AbsorbedRow row in table.RowList)
{
// Bucle a través de cada celda en la fila
foreach (AbsorbedCell cell in row.CellList)
{
// Recorra los fragmentos de texto e imprima el texto
foreach (TextFragment fragment in cell.TextFragments)
{
var sb = new StringBuilder();
foreach (TextSegment seg in fragment.Segments)
{
sb.Append(seg.Text);
}
var text = sb.ToString();
Console.Write($"{text}|");
}
}
Console.WriteLine();
}
}
}
Obtenga una licencia gratis
Puede usar Aspose.PDF for .NET sin limitaciones de evaluación usando una licencia temporal.
Conclusión
En este artículo, ha aprendido a extraer datos de tablas en un PDF usando C#. Además, ha visto cómo extraer una tabla de una región específica de la página en PDF. Puede explorar más sobre la API de PDF de C# utilizando la documentación. Además, puede publicar sus consultas en nuestro foro.