Extraer datos de tablas en PDF con C#

Extraer tablas de PDF programáticamente

Extraer tablas de PDFs no es una tarea trivial porque las tablas pueden ser creadas de diversas maneras.

Aspose.PDF for .NET tiene una herramienta para facilitar la recuperación de tablas. Para extraer datos de la tabla, debes realizar los siguientes pasos:

  1. Abrir el documento - instanciar un objeto Document.
  2. Crear un objeto TableAbsorber.
  3. Decidir qué páginas se van a analizar y aplicar Visit a las páginas deseadas. Los datos tabulares serán escaneados y el resultado se almacenará en TableList.
  4. TableList es una lista de AbsorbedTable. Para obtener los datos, itera a través de TableList y maneja RowList y CellList.
  5. Cada AbsorbedCell contiene una colección de TextFragments. Puedes procesarlo para tus propios propósitos.

El siguiente fragmento de código también funciona con la biblioteca Aspose.PDF.Drawing.

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

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ExtractTable()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_Tables();

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "input.pdf"))
    {                    
        foreach (var page in document.Pages)
        {
            Aspose.Pdf.TableAbsorber absorber = new Aspose.Pdf.TableAbsorber();
            absorber.Visit(page);
            foreach (var table in absorber.TableList)
            {
                Console.WriteLine("Table");
                foreach (var row in table.RowList)
                {
                    foreach (var cell in row.CellList)
                    {                                 
                        foreach (var fragment in cell.TextFragments)
                        {
                            var sb = new StringBuilder();
                            foreach (var seg in fragment.Segments)
                            {
                                sb.Append(seg.Text);
                            }
                            Console.Write($"{sb.ToString()}|");
                        }                           
                    }
                    Console.WriteLine();
                }
            }
        }
    }
}

Extraer tabla en un área específica de la página PDF

Cada tabla absorbida tiene una propiedad Rectangle que describe la posición de la tabla en la página.

Si necesitas extraer tablas ubicadas en una región específica, debes trabajar con coordenadas específicas.

El siguiente fragmento de código también funciona con la biblioteca Aspose.PDF.Drawing.

El siguiente ejemplo muestra cómo extraer una tabla marcada con una anotación cuadrada:

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ExtractMarkedTable()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_Tables();

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "input.pdf"))
    { 
        var page = document.Pages[1];
        var squareAnnotation =
            page.Annotations.FirstOrDefault(ann => ann.AnnotationType == Annotations.AnnotationType.Square)
            as Aspose.Pdf.Annotations.SquareAnnotation;


        var absorber = new Aspose.Pdf.Text.TableAbsorber();
        absorber.Visit(page);

        foreach (var 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)
            {
                foreach (var row in table.RowList)
                {
                    foreach (var cell in row.CellList)
                    {
                        foreach (var fragment in cell.TextFragments)
                        {
                            var sb = new StringBuilder();
                            foreach (var seg in fragment.Segments)
                            {
                                sb.Append(seg.Text);
                            }
                            var text = sb.ToString();
                            Console.Write($"{text}|");
                        }
                    }
                    Console.WriteLine();
                }
            }
        }
    }
}

Extraer datos de la 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 una hoja de cálculo de Excel, consulta el artículo Convertir PDF a Excel.

El siguiente fragmento de código también funciona con la biblioteca Aspose.PDF.Drawing.

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ExtractTableSaveExcel()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_Tables();

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "input.pdf"))
    {
        // Instantiate ExcelSave Option object
        Aspose.Pdf.ExcelSaveOptions excelSave = new Aspose.Pdf.ExcelSaveOptions { Format = ExcelSaveOptions.ExcelFormat.CSV };

        // Save the output in XLS format
        document.Save(dataDir + "ExtractTableSaveXLS_out.xlsx", excelSave);
    }
}