
PDF é um dos formatos de documentos dominantes atualmente. Ele suporta texto, gráficos, tabelas, anotações e uma variedade de outros elementos. Em alguns casos, pode ser necessário extrair dados das tabelas em documentos PDF, como faturas. Para conseguir isso programaticamente, o artigo aborda como extrair dados de tabelas em PDF usando Java.
- API Java para extrair dados de tabelas em PDF
- Extrair dados de tabelas em PDF
- Extrair tabela de uma área específica da página
Extrair dados de tabelas em PDF - API Java
Aspose.PDF for Java é uma API rica em recursos para criar e manipular documentos PDF. Usaremos essa API para extrair os dados de tabelas em documentos PDF. Você pode baixar o JAR da API ou instalá-lo em seu aplicativo Java usando as seguintes configurações Maven.
<repository>
    <id>AsposeJavaAPI</id>
    <name>Aspose Java API</name>
    <url>https://repository.aspose.com/repo/</url>
</repository>
<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-pdf</artifactId>
    <version>21.9</version>
</dependency>
Extração de dados de tabelas em PDF em Java
A seguir estão as etapas para extrair dados de tabelas em um PDF usando Java.
- Primeiro, carregue o documento PDF usando a classe Document.
- Percorra as páginas em PDF usando a coleção Document.getPages().
- Em cada iteração, inicialize o objeto TableAbsorber e visite a página selecionada usando o método TableAbsorber.visit(Page).
- Em um loop aninhado, itere pela lista de tabelas na coleção TableAbsorber.getTableList().
- Para cada AbsorbedTable na coleção, itere pela coleção de linhas de AbsorbedTable.getRowList().
- Para cada AbsorbedRow na coleção, itere pela coleção de células de AbsorbedRow.getCellList().
- Por fim, percorra a coleção TextFragment de cada AbsorbedCell e imprima o texto.
O exemplo de código a seguir mostra como extrair texto de tabelas em PDF usando Java.
// Carregar documento PDF de origem
com.aspose.pdf.Document pdfDocument = new com.aspose.pdf.Document("sample.pdf");
// Criar um absorvente de mesa
com.aspose.pdf.TableAbsorber absorber = new com.aspose.pdf.TableAbsorber();
// Digitalizar páginas
for (com.aspose.pdf.Page page : pdfDocument.getPages()) {
    
    // Visualizar página
    absorber.visit(page);
  
    // Iterar pelas tabelas
    for (com.aspose.pdf.AbsorbedTable table : absorber.getTableList()) {
        System.out.println("Table");
        
        // Iterar através da lista de linhas
        for (com.aspose.pdf.AbsorbedRow row : table.getRowList()) {
            
            // Iterar através da lista de células
            for (com.aspose.pdf.AbsorbedCell cell : row.getCellList()) {
                
                // Iterar por meio de fragmentos de texto
                for (com.aspose.pdf.TextFragment fragment : cell.getTextFragments()) {
                    StringBuilder sb = new StringBuilder();
                    for (com.aspose.pdf.TextSegment seg : fragment.getSegments())
                        sb.append(seg.getText());
                    System.out.print(sb.toString() + "|");
                }
            }
            System.out.println();
        }
    }
}
Java: Extraia dados da tabela de uma área específica da página PDF
A seguir estão as etapas para extrair a tabela de uma parte específica da página em um PDF usando Java.
- Primeiro, carregue o documento PDF usando a classe Document.
- Em seguida, selecione a Page desejada na coleção Document.getPages().
- Extraia a anotação Square da página.
- Em cada iteração, inicialize o objeto TableAbsorber e visite a página selecionada usando o método TableAbsorber.visit(Page).
- Em um loop aninhado, itere pela lista de tabelas na coleção TableAbsorber.getTableList().
- Verifique se a tabela absorvida está na região da página desejada.
- Para cada AbsorbedTable na coleção, itere pela coleção de linhas usando AbsorbedTable.getRowList().
- Para cada AbsorbedRow na coleção, itere pela coleção de células usando AbsorbedRow.getCellList().
- Por fim, percorra a coleção TextFragment de cada AbsorbedCell e imprima o texto.
O exemplo de código a seguir mostra como extrair tabelas de uma região específica da página PDF.
// Carregar documento PDF de origem
com.aspose.pdf.Document pdfDocument = new com.aspose.pdf.Document("sample.pdf");
// Obter referência da página desejada
com.aspose.pdf.Page page = pdfDocument.getPages().get_Item(1);
// Criar um seletor de anotação
com.aspose.pdf.AnnotationSelector annotationSelector = new com.aspose.pdf.AnnotationSelector(
        new com.aspose.pdf.SquareAnnotation(page, com.aspose.pdf.Rectangle.getTrivial()));
// Obter lista de anotações
java.util.List<com.aspose.pdf.Annotation> list = annotationSelector.getSelected();
if (list.size() == 0) {
    System.out.println("Marked tables not found..");
    return;
}
// Criar uma anotação quadrada
com.aspose.pdf.SquareAnnotation squareAnnotation = (com.aspose.pdf.SquareAnnotation) list.get(0);
// Criar absorvente de mesa e visitar a página
com.aspose.pdf.TableAbsorber absorber = new com.aspose.pdf.TableAbsorber();
absorber.visit(page);
// Iterar pelas tabelas
for (com.aspose.pdf.AbsorbedTable table : absorber.getTableList()) {
    {
        // Verifique se a tabela existe
        boolean isInRegion = (squareAnnotation.getRect().getLLX() < table.getRectangle().getLLX())
                && (squareAnnotation.getRect().getLLY() < table.getRectangle().getLLY())
                && (squareAnnotation.getRect().getURX() > table.getRectangle().getURX())
                && (squareAnnotation.getRect().getURY() > table.getRectangle().getURY());
        if (isInRegion) {
            for (com.aspose.pdf.AbsorbedRow row : table.getRowList()) {
                {
                    for (com.aspose.pdf.AbsorbedCell cell : row.getCellList()) {
                        for (com.aspose.pdf.TextFragment fragment : cell.getTextFragments()) {
                            StringBuilder sb = new StringBuilder();
                            for (com.aspose.pdf.TextSegment seg : fragment.getSegments())
                                sb.append(seg.getText());
                            System.out.print(sb.toString() + "|");
                        }
                    }
                    System.out.println();
                }
            }
        }
    }
}
Obtenha uma licença gratuita
Você pode usar o Aspose.PDF para Java sem limitações de avaliação usando uma licença temporária.
Conclusão
Neste artigo, você aprendeu como extrair dados de tabelas em um PDF usando Java. Além disso, o artigo abordou como extrair tabelas de uma região específica da página em PDF. Além disso, você pode aprender mais sobre o Aspose.PDF para Java usando a documentação. Além disso, você pode fazer suas perguntas através do nosso fórum.