Extrair texto de um arquivo PDF em Java

Extrair texto de um arquivo PDF em Java

Neste mundo acelerado, o volume de dados está se expandindo exponencialmente. Os arquivos PDF estão sendo imensamente usados para armazenar e representar dados. Torna-se difícil percorrer um grande número de páginas PDF para acessar parágrafos úteis. Portanto, aprenderemos como extrair texto de um arquivo PDF em Java programaticamente. No entanto, automatizar todo o processo de extração de texto economizará tempo e esforço e trará eficiência. Usaremos uma biblioteca PDF Java fácil de instalar que oferece métodos configuráveis para trabalhar com arquivos PDF.

Os seguintes pontos serão abordados nesta postagem do blog:

Biblioteca Java PDF - etapas de instalação

Você pode instalar esta biblioteca facilmente em seu aplicativo Java baixando os arquivos jar, ou pode seguir as seguintes configurações do Maven.

Repositório

<repository>
    <id>AsposeJavaAPI</id>
    <name>Aspose Java API</name>
    <url>https://repository.aspose.com/repo/</url>
</repository>

Dependência

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-pdf</artifactId>
    <version>20.12</version>
    <classifier>jdk17</classifier>
</dependency>

Extrair texto de um arquivo PDF em Java

Nesta seção, escreveremos as etapas e o trecho de código que extrai o texto de todas as páginas de um documento PDF.

Percorra os seguintes passos:

  1. Abra um documento PDF criando um objeto da classe Document.
  2. Inicialize um objeto da classe TextAbsorber para realizar a extração de texto.
  3. Chame o método getPages() que aceita o absorber para todas as páginas.
  4. Obtenha o texto extraído chamando o método getText().
  5. Grave o texto extraído no arquivo e feche o gravador.

Copie e cole o seguinte trecho de código para extrair o texto do documento PDF programaticamente.

        // Abra um documento PDF criando um objeto da classe Document.
        Document pdfDocument = new Document("INPUT-PDF-FILE");

        // Inicialize um objeto de TextAbsorber para realizar a extração de texto.
        TextAbsorber textAbsorber = new TextAbsorber();

        // Chame o método getPages() que aceita o absorber para todas as páginas.
        pdfDocument.getPages().accept(textAbsorber);

        // Obtenha o texto extraído chamando o método getText().
        String extractedText = textAbsorber.getText();
        try {
            FileWriter writer = new FileWriter(  "PATH-FOR-OUTPUT-FILE/extracted-text.txt", true);
            // Escreva uma linha de texto no arquivo
            writer.write(extractedText);
            // Fechar o fluxo
            writer.close();
        } catch (java.io.IOException e) {
            e.printStackTrace();
        }

Como extrair texto de uma região de página específica

Esta biblioteca também permite extrair texto da página desejada de um documento PDF.

Seguiremos os seguintes passos para conseguir isso:

  1. Crie um objeto da classe Document e carregue um arquivo PDF de origem.
  2. Instancie um objeto da classe TextAbsorber para extrair dados.
  3. Chame o método getTextSearchOptions() que permite definir o retângulo que delimita o texto extraído.
  4. Invoque getPages() para obter a coleção de páginas do documento e aceite o absorvedor para a primeira página.
  5. Chame getText() para obter o texto extraído e gravá-lo no arquivo.
  6. Chame o método close() para fechar o fluxo.

Copie e cole o seguinte snippet de código em seu arquivo Java:

       // crie um objeto da classe Document e carregue um arquivo PDF de origem.
        Document doc = new Document("INPUT-PDF-FILE");
        // instanciar um objeto de TextAbsorber para extrair dados.
        TextAbsorber absorber = new TextAbsorber();
        // chame o método getTextSearchOptions() que permite definir o retângulo que delimita o texto extraído.-
        absorber.getTextSearchOptions().setRectangle(new Rectangle(100, 200, 250, 350));
        // invoque getPages() para obter a coleção de páginas do documento e aceite o absorvedor para a primeira página.
        doc.getPages().get_Item(1).accept(absorber);
        // Chame getText() para obter o texto extraído e gravá-lo no arquivo
        String extractedText = absorber.getText();
        // crie um escritor e abra o arquivo
        BufferedWriter writer = new BufferedWriter(new FileWriter(new java.io.File("PATH-FOR-OUTPUT-FILE/ExtractedText.txt")));
        // escrever conteúdo extraído
        writer.write(extractedText);
        // Fechar escritor
        writer.close();

Biblioteca Java para extrair texto de arquivo PDF em forma de parágrafos

Esta seção demonstra as etapas a seguir e os trechos de código para extrair dados de documentos PDF em parágrafos.

  1. Inicialize um objeto da classe Document e carregue um arquivo PDF de origem.
  2. Crie um objeto da classe ParagraphAbsorber.
  3. Chame visit(Document doc) que realiza uma busca por seções e parágrafos no documento especificado.
  4. Invoque getPageMarkups() para obter a coleção de PageMarkup que foi absorvida.
  5. Percorra a coleção de MarkupSection que foi encontrada na página usando o método getSections().
  6. Invoque este método getParagraphs() que obtém a coleção de MarkupParagraph que foi encontrada na página.
  7. Chame o método getLines() para iterar as linhas do parágrafo.
        // Inicialize um objeto da classe Document e carregue um arquivo PDF de origem.
        Document doc = new Document(  "./static/sample.pdf");
        // Crie um objeto da classe ParagraphAbsorber.
        ParagraphAbsorber absorber = new ParagraphAbsorber();
        // Chamada visit(Document doc) que realiza busca por seções e parágrafos no documento especificado.
        absorber.visit(doc);
        // Invoque getPageMarkups() para obter a coleção de PageMarkup que foi absorvida.
        for (PageMarkup markup : absorber.getPageMarkups()) {
            int i = 1;
            // Percorra a coleção de MarkupSection que foi encontrada na página usando o método getSections().
            for (MarkupSection section : markup.getSections()) {
                int j = 1;
         // Invoque este método getParagraphs() que obtém a coleção de MarkupParagraph que foi encontrada na página. https://reference.aspose.com/pdf/java/com.aspose.pdf/page/Markup#getParagraphs--
                for (MarkupParagraph paragraph : section.getParagraphs()) {
                    StringBuilder paragraphText = new StringBuilder();
                    // Chame o método getLines() para iterar as linhas do parágrafo.
                    for (java.util.List<TextFragment> line : paragraph.getLines()) {
                        for (TextFragment fragment : line) {
                            paragraphText.append(fragment.getText());
                        }
                        paragraphText.append("\r\n");
                    }
                    paragraphText.append("\r\n");

                    System.out.println("Paragraph "+j+" of section "+ i + " on page"+ ":"+markup.getNumber());
                    System.out.println(paragraphText.toString());

                    j++;
                }
                i++;
            }
        }

Obtenha uma licença gratuita

Você pode obter uma licença temporária gratuita para experimentar a API sem limitações de avaliação.

Resumindo

Isso nos leva ao final deste artigo. Nós passamos por como extrair texto de um arquivo PDF em Java programaticamente. Além disso, analisamos os trechos de código para extrair texto de uma região de página específica e também exploramos a extração de texto em forma de parágrafo. Além disso, você pode acessar a documentação para explorar outros recursos desta biblioteca PDF Java. Finalmente, conholdate.com está constantemente escrevendo novas postagens no blog. Portanto, por favor, fique em contato para as atualizações mais recentes.

Faça uma pergunta

Em caso de dúvidas, sinta-se à vontade para nos escrever no fórum.

Veja também