2011-09-28 231 views
6

私は、暗号化されたPDFファイルを読み込み、テキスト、画像、およびその位置(x、y座標)を含むページ単位でファイルの内容を抽出するJavaプログラムを実行中です。ファイル。今私はこの目的のためにPDFBoxを使用しており、テキストと画像を取得しています。しかし、私はテキストの位置と画像の位置を取得することができませんでした。また、暗号化されたPDFファイルを読むときにいくつかの問題があります。PDFBoxを使用してテキストと画像の位置(xy座標)を読み取る

答えて

2

org.apache.pdfbox.examples.util.PrintTextLocationsをご覧ください。私はこれをかなり使用しました。要素のレイアウトやPDF文書の枠線の解析については非常に役立ちます。また、白いインクで印刷された、または印刷可能な領域の外に印刷されたアイテムを明らかにしました(恐らくドキュメントの透かし、または著者が目立たない「忘れた」アイテム)。

使用例:

Processing page: 0 
String[53.9,59.856995 fs=-6.0 xscale=6.0 height=-3.666 space=1.3320001 width=4.6679993]A 
String[58.568,59.856995 fs=-6.0 xscale=6.0 height=-3.666 space=1.3320001 width=2.6640015]f 
String[61.232002,59.856995 fs=-6.0 xscale=6.0 height=-3.666 space=1.3320001 width=1.6679993]e 
... 

あなたは簡単に要素の位置、境界ボックス、および「流れ」をプロットするために解析し、使用することができます。

java -cp app/target/pdfbox-app-1.5.0.jar org.apache.pdfbox.examples.util.PrintTextLocations ~/tmp/mydoc.pdf >~/tmp/out-text-locations.txt 

あなたはそのような何かを得るでしょう(すべての要素を通る軌跡)などを含む。すでに気づいているように、PDFをテキストに変換することはほとんど不可能です。それは実際にマークアップ言語ではなく、単にグラフィック記述フォーマット(すなわち、プリンタまたはスクリーン用)です。 「Hello world」を印刷するPDFを簡単に作成することはできますが、それは文字の位置をランダムにジャンプします(選択する場合は、任意のISO charエンコーディングとは異なるグリフを使用します)。 「単語」や「段落」という概念はありません。たとえば、2列の文書は、テキストを解析する際の悪夢となります。

あなたの質問の後半部分については、私は(XRef::okToPrint()XRef::okToChange()XRef::okToCopy()XRef::okToAddNotes()すべてがgTrueを返すように)Xref.ccを固定した後、Xpdfのバージョン3.02を使用して良い結果を持っていました。それは、暗号化されたものではなく、ロックされたドキュメントを扱うことです(そこに他のユーティリティがあります)。

関連する問題