Extracción básica de texto usando Java

La extracción básica de texto es el punto de partida para leer el contenido de un PDF en Java. Aspose.PDF ofrece dos enfoques comunes:

  • Utilice TextAbsorber cuando necesite un resultado de texto plano de un documento o de una página.
  • Utilice ParagraphAbsorber cuando necesita preservar la agrupación de página, sección, párrafo, línea y fragmento.

Las páginas PDF no almacenan el texto como lo hace un documento de procesamiento de textos, por lo que el orden extraído depende del flujo de contenido y del diseño de la página. Para la extracción específica de regiones, detalles de geometría, diseños de varias columnas, anotaciones, texto resaltado o la detección de superíndice y subíndice, utilice los artículos de extracción relacionados en esta sección.

Extraer texto de todas las páginas

Utilice TextAbsorber para recopilar una secuencia de texto plano de todo el documento y escribirla en un archivo. Esta es la opción más simple cuando solo necesita el contenido de texto legible y no requiere los límites de párrafo ni las coordenadas.

  1. Abra el PDF de origen en una instancia de Document.
  2. Cree un TextAbsorber para acumular texto a lo largo de todo el documento.
  3. Llame document.getPages().accept(textAbsorber) para que cada Page sea visitado por el absorbente.
  4. Escriba el búfer de texto extraído en el archivo de salida.
public static void extractTextFromAllPages(Path inputFile, Path outputFile) throws Exception {
    try (Document document = new Document(inputFile.toString())) {
        TextAbsorber textAbsorber = new TextAbsorber();
        document.getPages().accept(textAbsorber);
        Files.writeString(outputFile, textAbsorber.getText());
    }
}

Extraer texto de una página específica

Aplique el absorbedor solo en la página que lo requiera. Los números de página en el Document (la colección de páginas) son de base 1, por lo que get_Item(1) lee la primera página.

  1. Abra el PDF de origen en una instancia de Document.
  2. Cree un TextAbsorber para extraer una sola página.
  3. Llame accept(textAbsorber) en el objetivo Page seleccionado por número de página.
  4. Escriba el búfer de texto extraído en el archivo de salida.
public static void extractTextFromPage(Path inputFile, Path outputFile, int pageNumber) throws Exception {
    try (Document document = new Document(inputFile.toString())) {
        TextAbsorber textAbsorber = new TextAbsorber();
        document.getPages().get_Item(pageNumber).accept(textAbsorber);
        Files.writeString(outputFile, textAbsorber.getText());
    }
}

Extraer texto por estructura de párrafo

Utilice ParagraphAbsorber cuando necesite agrupación estructural en lugar de un único flujo de texto plano. Devuelve marcas de página con secciones, párrafos, líneas y objetos TextFragment, lo cual resulta útil cuando la salida debe preservar bloques lógicos de texto.

  1. Abra el PDF de origen en una instancia de Document.
  2. Cree un ParagraphAbsorber y recorra todo el documento para crear resultados de marcado de página.
  3. Itere a través de las marcas de página, secciones, párrafos, líneas y objetos TextFragment expuestos por el absorber.
  4. Construya el texto de salida con numeración explícita de página, sección y párrafo para preservar la agrupación estructural.
  5. Escriba el texto del párrafo extraído en el archivo de salida.
public static void extractParagraphsFromPdf(Path inputFile, Path outputFile) throws Exception {
    try (Document document = new Document(inputFile.toString())) {
        ParagraphAbsorber absorber = new ParagraphAbsorber();
        absorber.visit(document);

        StringBuilder text = new StringBuilder();
        for (PageMarkup pageMarkup : absorber.getPageMarkups()) {
            int sectionIndex = 1;
            for (MarkupSection section : pageMarkup.getSections()) {
                int paragraphIndex = 1;
                for (MarkupParagraph paragraph : section.getParagraphs()) {
                    StringBuilder paragraphText = new StringBuilder();
                    for (List<TextFragment> line : paragraph.getLines()) {
                        for (TextFragment fragment : line) {
                            paragraphText.append(fragment.getText());
                        }
                        paragraphText.append("\r\n");
                    }
                    text.append("Page ").append(pageMarkup.getNumber())
                            .append(", Section ").append(sectionIndex)
                            .append(", Paragraph ").append(paragraphIndex)
                            .append(":\n");
                    text.append(paragraphText).append("\n");
                    paragraphIndex++;
                }
                sectionIndex++;
            }
        }

        Files.writeString(outputFile, text.toString());
    }
}