Ekstraksi berbasis wilayah menggunakan Java

Mengekstrak teks dari wilayah halaman persegi panjang

Gunakan TextSearchOptions dengan Rectangle untuk membatasi ekstraksi ke area yang ditentukan pada halaman.

  1. Buka PDF sumber dalam sebuah instans Document.
  2. Buat sebuah TextAbsorber untuk mengumpulkan teks dari area halaman yang dipilih.
  3. Buat TextSearchOptions untuk Rectangle target dan aktifkan setLimitToPageBounds(true) sehingga ekstraksi tetap berada di dalam kotak halaman yang terlihat.
  4. Terapkan opsi pencarian yang dikonfigurasi ke absorber dan kunjungi Page target.
  5. Tulis buffer teks yang diekstrak ke file output.
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());
    }
}

Mengekstrak paragraf dengan informasi geometris

Gunakan ParagraphAbsorber untuk memeriksa persegi panjang bagian dan poligon paragraf bersama dengan teks yang diekstrak.

  1. Buka PDF sumber dalam sebuah instans Document.
  2. Buat sebuah ParagraphAbsorber dan kunjungi Page target untuk membangun informasi markup halaman.
  3. Baca hasil markup halaman pertama dan iterasi melalui bagian serta paragrafnya.
  4. Kumpulkan setiap persegi panjang bagian, poligon paragraf, dan teks paragraf yang direkonstruksi darinya. TextFragment baris.
  5. Bangun laporan keluaran dengan geometri dan detail teks yang diekstrak.
  6. Tuliskan detail yang diekstrak ke file keluaran.
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());
    }
}