PDFの構造

PDF内における画像の格納方法

PDFファイルでは、画像は通常、別個のオブジェクト(XObject)として格納され、これには画像の生バイナリデータが含まれます。これらの画像オブジェクトは、ページやファイルのリソースオブジェクトにリストされ、それぞれ固有の名前(例: Im1)が付けられています。PDFに埋め込まれた画像をTifやGif、Bmp、Jpeg、Pngなどと同一視するのは誤りです。

実際には、これらはピクセルのバイナリデータと、画像の色空間やその他の情報を含むものです。PDFの生成時には、画像が分割され、PDF作成ツールによって異なる方法で保存されることがあります。

以下に示すのは、AcrobatのPDFオブジェクトビューアでの表示例です。

AcrobatのPDFオブジェクトビューア

Screenshot of the Adobe Acrobat PDF Object Viewer showing the internal structure of a PDF file (PDF3.pdf). The viewer displays a hierarchical tree view of objects. Under 'Page: 1', the 'Resources' section is expanded, showing 'XObject: (1)' which contains 'Im1: (8)'. The 'Im1' object's properties are listed: BitsPerComponent: 8, ColorSpace: DeviceCMYK, Filter: DCTDecode, Height: 152, Length: 15828, Subtype: Image, Type: XObject, Width: 159. The 'Image stream' is also visible. Other objects like 'Contents', 'CropBox', 'MediaBox', 'Parent', 'ExtGState', 'Font', 'ProcSet', and 'Properties' are also listed under 'Resources'.
Screenshot of the Adobe Acrobat PDF Object Viewer showing the internal structure of a PDF file (PDF3.pdf). The viewer displays a hierarchical tree view of objects. Under 'Page: 1', the 'Resources' section is expanded, showing 'XObject: (1)' which contains 'Im1: (8)'. The 'Im1' object's properties are listed: BitsPerComponent: 8, ColorSpace: DeviceCMYK, Filter: DCTDecode, Height: 152, Length: 15828, Subtype: Image, Type: XObject, Width: 159. The 'Image stream' is also visible. Other objects like 'Contents', 'CropBox', 'MediaBox', 'Parent', 'ExtGState', 'Font', 'ProcSet', and 'Properties' are also listed under 'Resources'.

生の画像データは、ページの必要なサイズに合わせて調整されることがありますが、そうでない場合もあります。その場合、画像は描画時に拡大または縮小されます。PDFファイルの生成方法は、使用されるPDF作成ツールによって大きく変わります。

実際の画像データは圧縮が可能で、使用される圧縮形式の一つにDCTDecodeがあります。これはJPEGで用いられる圧縮方式と同じです(JPXはJpeg2000に相当します)。このデータを抽出すると、JPEGファイルとして開くことが可能ですが、色空間データを適切に調整する必要が生じる場合があります。

この画像は、PDFコンテンツストリーム内でDOコマンドと画像名(例: Im1)を用いて描画されます。同じ画像は何度も使用されることがあり、DOコマンドを実行する際に設定される値によって拡大・縮小、回転、切り抜きなどが行われます。一見すると単一の画像のように見えるものも、実際には複数の画像で構成されているか、または画像でないこともあり得ます。

つまり、PDFから画像を抽出したい場合、提供されているすべての生データから画像を再構築する作業が必要になります。また、画像の「RAW」バージョン(より高解像度で、元のサイズを保持している場合もある)と、画像の切り抜きや拡大縮小されたバージョンの両方が存在し、これらはどちらも抽出が可能です。