Extrair Dados de Tabela em PDF com C#

Extrair Tabelas de PDF programaticamente

Extrair tabelas de PDFs não é uma tarefa trivial porque as tabelas podem ser criadas de várias maneiras.

Aspose.PDF for .NET possui uma ferramenta para facilitar a recuperação de tabelas. Para extrair dados de tabela, você deve realizar os seguintes passos:

  1. Abrir documento - instanciar um objeto Document.
  2. Criar um objeto TableAbsorber.
  3. Decidir quais páginas devem ser analisadas e aplicar Visit nas páginas desejadas. Os dados tabulares serão escaneados e o resultado será armazenado em TableList.
  4. TableList é uma lista de AbsorbedTable. Para obter os dados, itere através de TableList e manipule RowList e CellList.
  5. Cada AbsorbedCell contém uma coleção de TextFragments. Você pode processá-la para seus próprios fins.

O seguinte trecho de código também funciona com a biblioteca Aspose.PDF.Drawing.

O seguinte exemplo mostra a extração de tabela de todas as 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();
                }
            }
        }
    }
}

Extrair tabela em área específica da página PDF

Cada tabela absorvida tem a propriedade Rectangle que descreve a posição da tabela na página.

Se você precisar extrair tabelas localizadas em uma região específica, deve trabalhar com coordenadas específicas.

O seguinte trecho de código também funciona com a biblioteca Aspose.PDF.Drawing.

O seguinte exemplo mostra como extrair uma tabela marcada com Anotação Quadrada:

// 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();
                }
            }
        }
    }
}

Extrair Dados da Tabela de PDF e armazená-los em arquivo CSV

O seguinte exemplo mostra como extrair uma tabela e armazená-la como arquivo CSV. Para ver como converter PDF para Planilha Excel, consulte o artigo Converter PDF para Excel.

O seguinte trecho de código também funciona com a 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);
    }
}