トラスト・ソフトウェア・システム
ホーム > PDF Tools トップ > PDF Tools ライト > PDF 構文

PDF構文 (PDF Syntax ISO 32000-1)

PDF1.7は、ISO技術委員会によって2008年1月に“ISO 32000-1規格”として承認されました。
ここでは、その規格で説明されているPDFの構文(構造)について説明しています。 PDFファイルは、8-bitデータを単位として構成されていて一般の文書編集アプリケーションで開くことができ、その内容を読取ることができます。ただし、バイナリのデータもそのまま(表示可能な文字に変換されずに)格納されていますので文字化けしているように表示されますが、これはPDFの仕様です。
ここでは、そのデータの一部を読み解くことで、PDF文書へのデータ追加など、PDF再構成の意味を説明し、PDF-ToolsでのPDFデータ解析や編集をより詳細にできるようにします。

オブジェクト ストリーム」へ <<< >>>「各種ディクショナリー」へ


8.クロス・リファレンス ストリーム - Cross-Reference Stream

PDF-1.5からは、クロス・リファレンス情報をクロス・リファレンス テーブルではなく、このクロス・リファレンス ストリームに格納できるようになりました。これにより、クロス・リファレンス情報が占める領域をより小さくすることができるようになりました。


クロス・リファレンス ストリームは、ストリームオブジェクト(Stream Object)に含まれていて、その内容はクロス・リファレンス テーブルと同様です。
なお、このストリーム オブジェクトのディクショナリには、トレイラー(Trailer)情報が含まれています。

以下にクロス・リファレンス ストリームの例を示します。

... objects ...

12 0 obj           % Cross-reference stream
  << /Type /XRef   % Cross-reference stream dictionary
    /Size ...
    /Root ...
  >>
stream
...                % Stream data containing cross-reference information
endstream
endobj

... more objects ...

startxref
byte_offset_of_cross-reference_stream % Points to object 12
%%EOF

8.1 クロス・リファレンス ストリーム ディクショナリ

クロス・リファレンス ストリーム(Cress-Reference Stream)ディクショナリには、以下に示す項目が通常のストリーム オブジェクト(Stream Object)のディクショナリおよびトレイラー(Trailer)ディクショナリの項目に追加して記載されます。

キータイプ
Typename(必須)"XRef"を指定
Sizeinteger(必須)PDF文書に含まれている、オブジェクトの総数
Trailerディクショナリの"Size"と同じ意味です。
Indexarray(オプション)2つの整数の組が0個以上含まれます。
組の内最初の整数はサブセクションで表される最初のオブジェクトオブジェクト番号で、次がそのサブセクションに含まれるオブジェクトの総数です。
Previnteger(必要な場合がある)更新前のクロスリファレンス ストリームのバイトオフセット(ファイルの先頭からのオフセット)。
この値は、Trailerディクショナリの"Prev"と同じ意味です。
Warray(必須)クロスリファレンスの各要素のサイズを示しています。
この要素の詳細は、クロス・リファレンス ストリーム データを参照してください。
この配列の要素数は、(PDF-1.5からPDF-1.7において)3です。

オブジェクトのタイプは「2.5オブジェクト」を参照してください。


上記の表で示された項目は、すべてダイレクト オブジェクトでなければなりません(「インダイレクト オブジェクトの参照指定はできない」という意味です)。array(IndexやW)で指定する場合でも、その要素はダイレクトオブジェクトでなければなりません。

クロスリファレンス ストリームは、暗号化してはいけません。


8.2 クロス・リファレンス ストリーム データ

クロス・リファレンス ストリーム データは3つの要素で構成されたフィールドの集合です。各フィールドに含まれる要素のバイトサイズは、クロスリファレンス ディクショナリのW配列で指定されます。
クロスリファレンス ストリームは、1つ以上のフィールドで構成されます。


各フィールドの最初の要素でそのタイプを示します(以下の表参照)。タイプは、3種類が規定されています。タイプによって、それに続く2要素の意味が違います。


各タイプにおける3要素の意味を以下に記します。

タイプ  要素の位置要素の意味
01要素のタイプ
指定された"0"は、フリーな(使用していない)オブジェクトのリストを表します。
クロスリファレンス テーブルの"f"の要素と同様の意味です。
2次のフリーなオブジェクトの番号
3再使用する場合の世代番号
11要素のタイプ
指定された"1"は、このオブジェクトが圧縮されていないことを示します。
クロスリファレンス テーブルの"n"の要素と同様の意味です。
2ファイルの先頭からのオフセット値
3オブジェクトの世代番号
21要素のタイプ
指定された"2"は、このオブジェクトが圧縮されていることを示します。
2オブジェクト ストリームが格納されたオブジェクトの番号(このオブジェクトの世代番号は必ず0(ゼロ)です。)
3オブジェクト ストリーム内でその位置を示すインデックスの番号

オブジェクト ストリーム」へ <<< >>>「各種ディクショナリー」へ


ご質問、お問い合わせ

メールで support@TrustSS.co.jp 宛てにお送りください。
または、質問のページからお送りいただくようお願いします。ご要望も承っております。(匿名で送れます。)




スリーソフト作者の方へ

PDF Easy Parseライブラリを無償で利用できるプログラムがあります。
こちらを参照してください。