Extrair Dados de Tabela em PDF com C#

Extrair Tabelas de PDF Programaticamente

Extrair tabelas de PDFs não é uma tarefa trivial pois a tabela pode ser criada de várias maneiras.

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

  1. Abrir documento - instancie um objeto Document;
  2. Criar um objeto TableAbsorber.
  3. TableList é uma Lista de AbsorbedTable. Para obter a data, percorra o TableList e manipule RowList e CellList
  4. 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 exemplo a seguir mostra a extração de tabelas de todas as páginas:

public static void Extract_Table()
{
    // Carregar o documento PDF de origem
    var filePath="<... insira o caminho para o arquivo pdf aqui ...>";
    Aspose.Pdf.Document pdfDocument = new Aspose.Pdf.Document(filePath);                       
    foreach (var page in pdfDocument.Pages)
    {
        Aspose.Pdf.Text.TableAbsorber absorber = new Aspose.Pdf.Text.TableAbsorber();
        absorber.Visit(page);
        foreach (AbsorbedTable table in absorber.TableList)
        {
            Console.WriteLine("Table");
            foreach (AbsorbedRow row in table.RowList)
            {
                foreach (AbsorbedCell cell in row.CellList)
                {                                 
                    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();
            }
        }
    }
}

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

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

Portanto, se você precisar extrair tabelas localizadas em uma região específica, você terá que 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:

public static void Extract_Marked_Table()
{
    // Carregar o documento PDF fonte
    var filePath="<... insira o caminho para o arquivo pdf aqui ...>";
    Aspose.Pdf.Document pdfDocument = new Aspose.Pdf.Document(filePath);  
    var page = pdfDocument.Pages[1];
    var squareAnnotation =
        page.Annotations.FirstOrDefault(ann => ann.AnnotationType == Annotations.AnnotationType.Square)
        as Annotations.SquareAnnotation;


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

    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)
        {
            foreach (AbsorbedRow row in table.RowList)
            {
                foreach (AbsorbedCell cell in row.CellList)
                {

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

Extrair dados de tabela de um PDF e armazenar em um arquivo CSV

O exemplo a seguir mostra como extrair uma tabela e armazená-la como um arquivo CSV. Para ver como converter um PDF em uma planilha do Excel, consulte o artigo Converter PDF para Excel.

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

public static void Extract_Table_Save_CSV()
{
    // Para exemplos completos e arquivos de dados, por favor acesse https://github.com/aspose-pdf/Aspose.PDF-for-.NET

    // Carregar documento PDF
    Document pdfDocument = new Document(_dataDir + "input.pdf");

    // Instanciar objeto de opção de salvamento Excel
    ExcelSaveOptions excelSave = new ExcelSaveOptions { Format = ExcelSaveOptions.ExcelFormat.CSV };

    // Salvar a saída no formato XLS
    pdfDocument.Save("PDFToXLS_out.xlsx", excelSave);
}