7

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

4

1 に答える 1

3

をご覧くださいorg.apache.pdfbox.examples.util.PrintTextLocations。私はこれをかなり使いましたが、PDF 文書の要素と境界ボックスのレイアウトを分析するのに非常に役立ちます。また、白インクで印刷されたアイテム、または印刷可能領域の外にあるアイテム (おそらくドキュメントの透かし、または作成者によって見えなくなった「忘れられた」アイテム) も明らかになりました。

使用例:

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

あなたはそのようなものを得るでしょう:

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
...

各ページの要素の位置、境界ボックス、「フロー」(すべての要素を通る軌跡)などを簡単に解析してプロットするために使用できます。すでにお気づきだと思いますが、PDF をテキストに変換することはほとんど不可能であることがわかります。これは、マークアップ言語ではなく、単なるグラフィック記述形式 (つまり、プリンターまたは画面用) です。「Hello world」を印刷する PDF を簡単に作成できますが、文字位置がランダムにジャンプし (また、必要に応じて ISO 文字エンコーディングとは異なるグリフを使用します)、PDF をテキストに変換するのが非常に難しくなります。「単語」や「段落」という概念はありません。たとえば、2 列のドキュメントをテキストに解析するのは悪夢です。

質問の 2 番目の部分については、Xref.cc (make XRef::okToPrint()XRef::okToChange()XRef::okToCopy()およびXRef::okToAddNotes()すべて return gTrue) を修正した後、xpdf バージョン 3.02 を使用して良い結果が得られました。これは、暗号化されたドキュメントではなく、ロックされたドキュメントを処理するためのものです (そのためのユーティリティは他にもあります)。

于 2012-10-12T18:25:29.417 に答える