fbpx
< 戻る
印刷

構造化されていないテキストの抽出

構造化されたPDFファイルと構造化されていないPDFファイル

PDF ファイルは、構造化された PDF ファイル (ページ構造に関する情報を含む) または構造化されていない PDF ファイル (構造情報を含まず、コンテンツがどのような順序であってもよい) を作成することができます。これはPDFが作成されるときに発生し、非構造化PDFファイルを構造化PDFファイルに変換することはできません。

JPedalは、PDFファイルからテキストコンテンツを抽出するためのいくつかのメソッドを提供しています。この場合、指定した矩形の中からすべてのテキストを抽出することができます。

コマンドラインまたは他の言語からPDFからテキストを抽出する

 
				
					java --module-path . --add-modules com.idrsolutions.jpedal org/jpedal/examples/text/ExtractTextInRectangle 
"inputFileOrDir" "outputDir"

				
			

Java 11以降のモジュールを推奨します。古いバージョンを使用している場合は、クラスパスを使用する必要があります。

API利用例-XMLへの書き出し

 
				
					 ExtractTextInRectangle extract = new ExtractTextInRectangle("C:/pdfs/mypdf.pdf");
 extract.setOutputFormat(OUTPUT_FORMAT.XML);
 //extract.setEstimateParagraphs(true); //文書内の段落を推定
 //extract.setPassword("password");
 if (extract.openPDFFile()) {
     int pageCount = extract.getPageCount();
     for (int page = 1; page <= pageCount; page++) {

        String text = extract.getTextOnPage(page);
        
        //オルタナティブ
        //座標はx1、y1(左上)、x2、y2(右下)。
        //String text = extract.getTextOnPage(page, x1, y1, x2, y2);
     }
 }

 extract.closePDFfile();
				
			

API利用例-プレーンテキストへの書き出し

				
					ExtractTextInRectangle extract = new ExtractTextInRectangle("C:/pdfs/mypdf.pdf");
 extract.setOutputFormat(OUTPUT_FORMAT.TXT);
 //extract.setEstimateParagraphs(true); //文書内の段落の見積もり
 //extract.setPassword("password");
 if (extract.openPDFFile()) {
     int pageCount = extract.getPageCount();
     for (int page = 1; page <= pageCount; page++) {

        String text = extract.getTextOnPage(page);
        
        //オルタナティブ
        //座標はx1、y1(左上)、x2、y2(右下)。
        //String text = extract.getTextOnPage(page, x1, y1, x2, y2);
     }
 }

 extract.closePDFfile();
				
			

Java で PDF からテキストを抽出

				
					//プレーンテキストの抽出
ExtractTextInRectangle.writeAllTextToDir("inputFileOrDirectory", "password_or_null", "outputDir", -1, OUTPUT_FORMAT.TXT, false);

//テキストをXMLとして抽出
ExtractTextInRectangle.writeAllTextToDir("inputFileOrDirectory", "password_or_null", "outputDir", -1, OUTPUT_FORMAT.XML, false);

				
			

この例ではJPedal ExtractTextInRectangleクラスを使用しています。ExtractTextInRectangleはページごとにtxtファイルを出力します。

抽出して出力する

出力を抽出する際に注意すべき点は、PDF ページ上のテキストは構造化されていない可能性があるということです。構造化 さ れていない文書には、 内容がどのようにレイアウトされているか、 またはページに追加されているかについての詳細情報が含まれていません。例えば、 ページ上のすべての文字 「a」 が追加 さ れていて、 次にすべての文字 「b」 が 追加 されている、というようなケースがあります。

これを処理するために、ExtractTextInRectangleは、それが抽出されるときに矩形内に表示されるように、このコンテンツを順序付けしようとします。

テキストの方向

ページ (または選択領域) に複数の向き (HORIZONTAL_LEFT_TO_RIGHT ・ HORIZONTAL_RIGHT_TO_LEFT ・ VERTICAL_TOP_TO_BOTTOM ・ VERTICAL_BOTTOM_TO_TOP) を持つテキストが含まれている場合、 最も一般的な向きのテキストだけが抽出され、それ以外のテキストは無視されます。

使用される座標

抽出方式はすべて、指定された矩形内の PDF テキストを抽出します。この矩形の座標の 必須フォーマットは x1, y1 (左上隅) と x2, y2 (右下隅)です。ページ原点は左下(Java とは逆)です。

    MENU
    PAGE TOP