Extracción basada en regiones usando Java

Extraer texto de una región rectangular de la página

Utilice TextSearchOptions con un Rectangle para restringir la extracción a un área definida en una página.

  1. Abra el PDF de origen en una instancia de Document.
  2. Cree un TextAbsorber para recopilar texto del área de página seleccionada.
  3. Cree TextSearchOptions para el objetivo Rectangle y habilite setLimitToPageBounds(true) para que la extracción permanezca dentro del cuadro de página visible.
  4. Aplique las opciones de búsqueda configuradas al absorber y visite el objetivo Page.
  5. Escriba el búfer de texto extraído en el archivo de salida.
public static void extractTextFromRegion(Path inputFile, Path outputFile, int pageNumber, Rectangle rectangle)
        throws Exception {
    try (Document document = new Document(inputFile.toString())) {
        TextAbsorber absorber = new TextAbsorber();
        TextSearchOptions options = new TextSearchOptions(rectangle);
        options.setLimitToPageBounds(true);
        absorber.setTextSearchOptions(options);
        document.getPages().get_Item(pageNumber).accept(absorber);
        Files.writeString(outputFile, absorber.getText());
    }
}

Extraer párrafos con información de geometría

Utilice ParagraphAbsorber para inspeccionar los rectángulos de sección y los polígonos de párrafo junto con el texto extraído.

  1. Abra el PDF de origen en una instancia de Document.
  2. Cree un ParagraphAbsorber y visite el objetivo Page para generar información de marcado de página.
  3. Lea el primer resultado de marcado de página y recorra sus secciones y párrafos.
  4. Recopile cada rectángulo de sección, polígono de párrafo y el texto del párrafo reconstruido a partir de su TextFragment líneas.
  5. Construya el informe de salida con geometría y detalles del texto extraído.
  6. Escriba los detalles extraídos en el archivo de salida.
public static void extractParagraphsWithGeometry(Path inputFile, Path outputFile) throws Exception {
    try (Document document = new Document(inputFile.toString())) {
        ParagraphAbsorber absorber = new ParagraphAbsorber();
        absorber.visit(document.getPages().get_Item(1));

        PageMarkup pageMarkup = absorber.getPageMarkups().get(0);
        StringBuilder text = new StringBuilder();
        int sectionIndex = 1;
        for (MarkupSection section : pageMarkup.getSections()) {
            text.append("Section ").append(sectionIndex)
                    .append(": rectangle = ").append(section.getRectangle()).append("\n");
            int paragraphIndex = 1;
            for (MarkupParagraph paragraph : section.getParagraphs()) {
                text.append("  Paragraph ").append(paragraphIndex)
                        .append(": polygon = ").append(Arrays.toString(paragraph.getPoints())).append("\n");
                StringBuilder paragraphText = new StringBuilder();
                for (List<TextFragment> line : paragraph.getLines()) {
                    for (TextFragment fragment : line) {
                        paragraphText.append(fragment.getText());
                    }
                    paragraphText.append("\r\n");
                }
                text.append("    Text: ").append(paragraphText).append("\n\n");
                paragraphIndex++;
            }
            sectionIndex++;
        }

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