JavaでPDFファイルからテキストを抽出する

JavaでPDFファイルからテキストを抽出する

このペースの速い世界では、データの量は指数関数的に拡大しています。 PDFファイルは、データの保存と表現に非常に使用されています。有用な段落にアクセスするために多数のPDFページを通過することは困難になります。したがって、プログラムでJavaのPDFファイルからテキストを抽出する方法を学習します。ただし、テキスト抽出のプロセス全体を自動化すると、時間と労力が節約され、効率が向上します。インストールが簡単なPDFJavaライブラリを使用して、PDFファイルを操作するための構成可能なメソッドを提供します。

このブログ投稿では、次の点について説明します。

PDFJavaライブラリ-インストール手順

このライブラリは、jarファイルをダウンロードしてJavaアプリケーションに簡単にインストールできます。または、次のMaven構成に従うこともできます。

リポジトリ

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

依存

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

JavaでPDFファイルからテキストを抽出する

このセクションでは、PDFドキュメントのすべてのページからテキストを抽出する手順とコードスニペットを記述します。

次の手順を実行します。

  1. Documentクラスのオブジェクトを作成して、PDFドキュメントを開きます。
  2. TextAbsorberクラスのオブジェクトを初期化して、テキスト抽出を実行します。
  3. すべてのページのアブソーバーを受け入れるgetPages()メソッドを呼び出します。
  4. getText()メソッドを呼び出して、抽出されたテキストを取得します。
  5. 抽出したテキストをファイルに書き込み、ライターを閉じます。

次のコードスニペットをコピーして貼り付け、プログラムでPDFドキュメントからテキストを抽出します。

        // Documentクラスのオブジェクトを作成してPDFドキュメントを開きます。
        Document pdfDocument = new Document("INPUT-PDF-FILE");

        // TextAbsorberのオブジェクトを初期化して、テキスト抽出を実行します。
        TextAbsorber textAbsorber = new TextAbsorber();

        // すべてのページのアブソーバーを受け入れるgetPages()メソッドを呼び出します。
        pdfDocument.getPages().accept(textAbsorber);

        // getText()メソッドを呼び出して、抽出されたテキストを取得します。
        String extractedText = textAbsorber.getText();
        try {
            FileWriter writer = new FileWriter(  "PATH-FOR-OUTPUT-FILE/extracted-text.txt", true);
            // ファイルに1行のテキストを書き込みます
            writer.write(extractedText);
            // ストリームを閉じる
            writer.close();
        } catch (java.io.IOException e) {
            e.printStackTrace();
        }

特定のページ領域からテキストを抽出する方法

このライブラリを使用すると、PDFドキュメントの目的のページからテキストを抽出することもできます。

これを実現するには、次の手順に従います。

  1. Documentクラスのオブジェクトを作成し、ソースPDFファイルをロードします。
  2. TextAbsorberクラスのオブジェクトをインスタンス化して、データを抽出します。
  3. 抽出されたテキストを区切る長方形を定義できるgetTextSearchOptions()メソッドを呼び出します。
  4. getPages()を呼び出して、ドキュメントページのコレクションを取得し、最初のページのアブソーバーを受け入れます。
  5. getText()を呼び出して、抽出されたテキストを取得し、ファイルに書き込みます。
  6. close()メソッドを呼び出して、ストリームを閉じます。

次のコードスニペットをコピーしてJavaファイルに貼り付けます。

       // Documentクラスのオブジェクトを作成し、ソースPDFファイルをロードします。
        Document doc = new Document("INPUT-PDF-FILE");
        // TextAbsorberのオブジェクトをインスタンス化して、データを抽出します。
        TextAbsorber absorber = new TextAbsorber();
        // 抽出されたテキストを区切る長方形を定義できるgetTextSearchOptions()メソッドを呼び出します。-
        absorber.getTextSearchOptions().setRectangle(new Rectangle(100, 200, 250, 350));
        // getPages()を呼び出して、ドキュメントページのコレクションを取得し、最初のページのアブソーバーを受け入れます。
        doc.getPages().get_Item(1).accept(absorber);
        // getText()を呼び出して、抽出されたテキストを取得し、ファイルに書き込みます
        String extractedText = absorber.getText();
        // ライターを作成してファイルを開きます
        BufferedWriter writer = new BufferedWriter(new FileWriter(new java.io.File("PATH-FOR-OUTPUT-FILE/ExtractedText.txt")));
        // 抽出した内容を書き込む
        writer.write(extractedText);
        // ライターを閉じる
        writer.close();

段落形式でPDFファイルからテキストを抽出するJavaライブラリ

このセクションでは、次の手順と、段落内のPDFドキュメントからデータを抽出するためのコードスニペットについて説明します。

  1. Documentクラスのオブジェクトを初期化し、ソースPDFファイルをロードします。
  2. ParagraphAbsorberクラスのオブジェクトを作成します。
  3. visit(Document doc)を呼び出して、指定したドキュメントのセクションと段落を検索します。
  4. getPageMarkups()を呼び出して、吸収されたPageMarkupのコレクションを取得します。
  5. getSections()メソッドを使用して、ページで見つかったMarkupSectionのコレクションをループします。
  6. このgetParagraphs()メソッドを呼び出して、ページで見つかったMarkupParagraphのコレクションを取得します。
  7. getLines()メソッドを呼び出して、段落の行を繰り返します。
        // Documentクラスのオブジェクトを初期化し、ソースPDFファイルをロードします。
        Document doc = new Document(  "./static/sample.pdf");
        // ParagraphAbsorberクラスのオブジェクトを作成します。
        ParagraphAbsorber absorber = new ParagraphAbsorber();
        // 指定されたドキュメントのセクションと段落の検索を実行するvisit(Document doc)を呼び出します。
        absorber.visit(doc);
        // getPageMarkups()を呼び出して、吸収されたPageMarkupのコレクションを取得します。
        for (PageMarkup markup : absorber.getPageMarkups()) {
            int i = 1;
            // getSections()メソッドを使用して、ページで見つかったMarkupSectionのコレクションをループします。
            for (MarkupSection section : markup.getSections()) {
                int j = 1;
         // ページで見つかったMarkupParagraphのコレクションを取得するthsigetParagraphs()methidを呼び出します。 https://reference.aspose.com/pdf/java/com.aspose.pdf/page/Markup#getParagraphs--
                for (MarkupParagraph paragraph : section.getParagraphs()) {
                    StringBuilder paragraphText = new StringBuilder();
                    // getLines()メソッドを呼び出して、段落の行を繰り返します。
                    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++;
            }
        }

無料ライセンスを取得する

無料の一時ライセンスを取得して、評価の制限なしにAPIを試すことができます。

まとめ

これで、この記事は終わりです。プログラムでJavaのPDFファイルからテキストを抽出する方法を説明しました。さらに、特定のページ領域からテキストを抽出するためのコードスニペットを調べ、段落形式でのテキスト抽出についても検討しました。さらに、ドキュメントに目を通し、このPDFJavaライブラリの他の機能を調べることができます。最後に、conholdate.comは一貫して新しいブログ投稿を書いています。したがって、最新のアップデートについては連絡を取り合ってください。

質問する

ご不明な点がございましたら、フォーラムまでお気軽にお問い合わせください。

関連項目