Java を使用した領域ベース抽出

矩形ページ領域からテキストの抽出

TextSearchOptions と Rectangle を使用して、ページ上の定義された領域への抽出を制限してください。

  1. ソース PDF を Document インスタンスで開いてください。
  2. TextAbsorber を作成して、選択されたページ領域からテキストを取得してください。
  3. TextSearchOptions を対象の Rectangle に対して作成し、setLimitToPageBounds(true) を有効にして、抽出が表示ページボックス内に収まるようにしてください。
  4. 設定した検索オプションを absorber に適用し、対象の Page を訪問してください。
  5. 抽出されたテキストバッファを出力ファイルに書き込んでください。
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());
    }
}

ジオメトリ情報を含む段落の抽出

ParagraphAbsorber を使用して、抽出されたテキストとともにセクション矩形と段落ポリゴンを検査します。

  1. ソース PDF を Document インスタンスで開いてください。
  2. ParagraphAbsorber を作成し、対象の Page を処理してページのマークアップ情報を構築してください。
  3. 最初のページマークアップ結果を読み取り、そのセクションおよび段落を反復処理してください。
  4. 各セクションの矩形、段落のポリゴン、およびその TextFragment 行から再構築された段落テキストを収集してください。
  5. ジオメトリ情報および抽出されたテキストの詳細を含む出力レポートを作成してください。
  6. 抽出された詳細を出力ファイルに書き込んでください。
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());
    }
}