2017-08-07 8 views
1

私はpdfから画像抽出を自動化するために約1週間試してきました。残念ながら、私がここで見つけた答えは役に立たなかった。 pypdf2を使用して同じコードで複数のバリエーションを見たことがありますが、いずれも['/XObject']であり、結果はKeyErrorとなります。Pythonを使用してPDFでストリームを検索して識別する

pypdf2の辞書では見つからないストリームに隠れているようです(再帰的に構造全体を調べても、私が見つけることができるすべての間接オブジェクトに対して.getObject()が呼び出されます)。

pypdf2を使用しています。フィルタを使用してストリームを検索するには、Notepad++を使用してpdfから1ページを書き込んで開きました。

pdfrwは私がストリーム(他の人を取得する方法がない手がかり)を取得するためにPdfReader(path).pages[page].Contents.streamを使用できるように、やや役立ちました。私が見つけることができるものから

(それはまた、正と負の両方の、浮動小数点数を多く含む)

/Part <</MCID 0 >>BDC 

zlibを使用して

は、私はそれを解凍し、始まる何かを得ました、BDCにはghostscriptと関係があります。

この時点で私はあきらめて助けを求めることにしました。

、少なくとも、すべてのストリームを抽出し(とFlateDecodeタグを識別?)するためのPythonのツールがあります

そして、私はそこに隠されているものを識別するための方法ですが?私はいくつかのイメージフォーマットの開始タグを期待していましたが、これは明らかにそうではありません。この結果をさらに解析して、そこに隠れる可能性のある画像を見つけるにはどうすればよいですか?

私は適切に表示されているPDFに適用できるものを探しています。さらに解析するツール、ストリームの意味を理解するのに役立つツール、さらには何が起こっているのかを理解するのに役立つリファレンスもあります。

編集:パトリックが指摘したように、間違った木を鳴らしていたようです。 Notepad++でPDFを開くときや、PDFを解析するためのさまざまなPythonスクリプトを実行しているときに、xObjectsが見つからなかったので、私はストリームに行きました。私はxObjectタグなしで、画像であると思われるものを見つけることができましたが、情報は圧縮されていませんが、ストリームタグのように見えます。

+0

多くのツールがPDFファイルを生成しています(境界線の多くは欠陥です)、問題を引き起こす特定のドキュメントのサンプルを見ることなくアドバイスをするのは難しいです。共有できるサンプルはありますか? –

+0

@PauloScardine申し訳ありませんが、私は自分の言葉が特定のPDFのヘルプを探していることを意味することを認識しています。 PDF文書は正しく読者に表示され、問題のないページを抽出することができます。ストリームの内容の参照を見つけることができません(または、私にとって簡単に行うことができるすべてのPythonツール。これもうまくいくでしょう)。 とにかく、適切に表示されているPDF文書で動作するものを探してください。 – user1999728

+0

あなたは*から始まる何かを得ました: '/ Part <> BDC' *と*この時点で*を諦めましたか?どうして? PDFコンテンツストリームに正常に到着しました。ストリームコンテンツを解釈するためには、PDF仕様ISO 32000-1を採択するだけでした。 – mkl

答えて

1

一般的ではないインラインイメージを抽出する場合を除き、コンテンツストリームはイメージを探す場所ではありません。より一般的なケースは、XObject型のストリーム、Imageのサブタイプです。通常、ページのResource-> XObjectディクショナリにあります(@mklで示されるPDF参照のセクション7.3.3,7.8.3、および8.95を参照)。

イメージXObjectsは、独自のResource-> XObjectディクショナリにあるフォームXObjects(サブタイプフォーム、独自のコンテンツストリームを持つことを示します)にも存在するため、Image XObjectsの検索は再帰的に行われます。

イメージXObjectには、独自のイメージXObjectであるsoftMaskを含めることもできます。Form XObjectsはTiling Patternでも使用されているため、Image XObjectsが含まれている可能性があります(一般的ではありません)。または、AnnotationのNormal Appearanceで使用されます(Image XObjectsは3Dやマルチメディア注釈)。

関連する問題