Extraer texto de un archivo PDF en Java

Extraer texto de un archivo PDF en Java

En este mundo acelerado, el volumen de datos se está expandiendo exponencialmente. Los archivos PDF se utilizan inmensamente para almacenar y representar datos. Se vuelve difícil pasar por una gran cantidad de páginas PDF para acceder a párrafos útiles. Por lo tanto, aprenderemos cómo extraer texto de un archivo PDF en Java mediante programación. Sin embargo, la automatización de todo el proceso de extracción de texto ahorrará tiempo y esfuerzo y traerá eficiencia. Usaremos una biblioteca PDF Java fácil de instalar que ofrece métodos configurables para trabajar con archivos PDF.

Los siguientes puntos se tratarán en esta publicación de blog:

Biblioteca PDF Java - pasos de instalación

Puede instalar esta biblioteca fácilmente en su aplicación Java descargando los archivos jar, o puede seguir las siguientes configuraciones de Maven.

Repositorio

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

Dependencia

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

Extraer texto de un archivo PDF en Java

En esta sección, escribiremos los pasos y el fragmento de código que extrae el texto de todas las páginas de un documento PDF.

Realice los siguientes pasos:

  1. Abra un documento PDF creando un objeto de la clase Documento.
  2. Inicialice un objeto de la clase TextAbsorber para realizar la extracción de texto.
  3. Llame al método getPages() que acepta el absorbedor para todas las páginas.
  4. Obtenga el texto extraído llamando al método getText().
  5. Escriba el texto extraído en el archivo y cierre el editor.

Copie y pegue el siguiente fragmento de código para extraer texto del documento PDF mediante programación.

        // Abra un documento PDF creando un objeto de la clase Documento.
        Document pdfDocument = new Document("INPUT-PDF-FILE");

        // Inicialice un objeto de TextAbsorber para realizar la extracción de texto.
        TextAbsorber textAbsorber = new TextAbsorber();

        // Llame al método getPages() que acepta el absorbedor para todas las páginas.
        pdfDocument.getPages().accept(textAbsorber);

        // Obtenga el texto extraído llamando al método getText().
        String extractedText = textAbsorber.getText();
        try {
            FileWriter writer = new FileWriter(  "PATH-FOR-OUTPUT-FILE/extracted-text.txt", true);
            // Escribir una línea de texto en el archivo.
            writer.write(extractedText);
            // Cierra la corriente
            writer.close();
        } catch (java.io.IOException e) {
            e.printStackTrace();
        }

Cómo extraer texto de una región de página en particular

Esta biblioteca también le permite extraer texto de la página deseada de un documento PDF.

Seguiremos los siguientes pasos para conseguirlo:

  1. Cree un objeto de la clase Documento y cargue un archivo PDF de origen.
  2. Crea una instancia de un objeto de la clase TextAbsorber para extraer datos.
  3. Llame al método getTextSearchOptions() que permite definir un rectángulo que delimita el texto extraído.
  4. Invoque getPages() para obtener la colección de páginas del documento y acepte el absorbedor para la primera página.
  5. Llame a getText() para obtener el texto extraído y escribirlo en el archivo.
  6. Llame al método close() para cerrar la transmisión.

Copie y pegue el siguiente fragmento de código en su archivo Java:

       // cree un objeto de la clase Documento y cargue un archivo PDF de origen.
        Document doc = new Document("INPUT-PDF-FILE");
        // crear una instancia de un objeto de TextAbsorber para extraer datos.
        TextAbsorber absorber = new TextAbsorber();
        // llamar al método getTextSearchOptions() que permite definir un rectángulo que delimita el texto extraído.-
        absorber.getTextSearchOptions().setRectangle(new Rectangle(100, 200, 250, 350));
        // invoque getPages() para obtener la colección de páginas del documento y acepte el absorbedor para la primera página.
        doc.getPages().get_Item(1).accept(absorber);
        // Llame a getText() para obtener el texto extraído y escribirlo en el archivo
        String extractedText = absorber.getText();
        // crear un escritor y abrir el archivo
        BufferedWriter writer = new BufferedWriter(new FileWriter(new java.io.File("PATH-FOR-OUTPUT-FILE/ExtractedText.txt")));
        // escribir contenidos extraídos
        writer.write(extractedText);
        // Cerrar escritor
        writer.close();

Biblioteca Java para extraer texto de un archivo PDF en forma de párrafos

Esta sección demuestra los siguientes pasos y los fragmentos de código para extraer datos de documentos PDF en párrafos.

  1. Inicialice un objeto de la clase Documento y cargue un archivo PDF de origen.
  2. Cree un objeto de la clase ParagraphAbsorber.
  3. Llame a visit(Document doc) que realiza una búsqueda de secciones y párrafos en el documento especificado.
  4. Invoque getPageMarkups() para obtener la colección de PageMarkup que se absorbieron.
  5. Recorra la colección de MarkupSection que se encontró en la página usando el método getSections().
  6. Invoque este método getParagraphs() que obtiene la colección de MarkupParagraph que se encontró en la página.
  7. Llame al método getLines() para iterar líneas del párrafo.
        // Inicialice un objeto de la clase Documento y cargue un archivo PDF de origen.
        Document doc = new Document(  "./static/sample.pdf");
        // Crea un objeto de la clase ParagraphAbsorber.
        ParagraphAbsorber absorber = new ParagraphAbsorber();
        // Visita de llamada (Documento doc) que realiza la búsqueda de secciones y párrafos en el documento especificado.
        absorber.visit(doc);
        // Invoque getPageMarkups() para obtener la colección de PageMarkup que se absorbieron.
        for (PageMarkup markup : absorber.getPageMarkups()) {
            int i = 1;
            // Recorra la colección de MarkupSection que se encontró en la página usando el método getSections().
            for (MarkupSection section : markup.getSections()) {
                int j = 1;
         // Invoque este método getParagraphs() que obtiene la colección de MarkupParagraph que se encontró en la página. https://reference.aspose.com/pdf/java/com.aspose.pdf/page/Markup#getParagraphs--
                for (MarkupParagraph paragraph : section.getParagraphs()) {
                    StringBuilder paragraphText = new StringBuilder();
                    // Llame al método getLines() para iterar líneas del párrafo.
                    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++;
            }
        }

Obtenga una licencia gratis

Puede obtener una licencia temporal gratuita para probar la API sin limitaciones de evaluación.

Resumiendo

Esto nos lleva al final de este artículo. Hemos analizado cómo extraer texto de un archivo PDF en Java mediante programación. Además, hemos revisado los fragmentos de código para extraer texto de una región de página en particular y también hemos explorado la extracción de texto en forma de párrafo. Además, puede consultar la documentación para explorar otras funciones de esta biblioteca Java en PDF. Finalmente, conholdate.com constantemente escribe nuevas publicaciones de blog. Por lo tanto, manténgase en contacto para conocer las últimas actualizaciones.

Hacer una pregunta

Si tiene alguna consulta, no dude en escribirnos al foro.

Ver también