PDFの仕様書を読む 第23回 3.4.4 File Trailer |
p60あたり
トレイラーはアプリケーションがPDFを読み込む際、ファイル中から迅速にクロスリファレンステーブルを見つけたりある種のオブジェクトを見つけることを可能にしている。アプリケーションがPDFを読む際は末尾から読まなければならない。PDFファイルの末尾の行はEOFマーカー(%%EOF)を含んでいるだけだ(Appendix Hのnote15参照)。これには先行する2行があって、2行前はキーワードstatxrefを含んでおり、その次の行はファイルの先頭から最後のクロスリファレンスセクションのxrefキーワードが開始する点までのバイトオフセットを記している。startxrefの前にはtrailer dictionaryがあり、trailerキーワードとその後に<<>>カッコで囲われたkey-valueのペアがが何個か続く。つまりトレイラーは次のような構造になっている:
trailer
<< key1 value1
key2 value2
…
keyn valuen
>>
startxref
Byte_offset_of_last_cross-reference_section
%%EOF
Table 3.11 トレイラーディクショナリの内容
Table3.11 トレイラーディクショナリ中のエントリ
----
Key(Type): Value
--
Size(integer): (必須)そのファイルのクロスリファレンステーブルの
全エントリ数。オリジナルのセクションと更新(追加?)されたセクションの
合計からなる。この値はファイル内のオブジェクト番号の最大値より
1だけ大きいものとなる。
Prev(integer): (ファイルが2個以上のクロスリファレンスを持つ場合に
存在) ファイルの先頭から1個前のクロスリファレンステーブルまでの
バイトオフセット。
Root(dictionary): (必須; 必ず間接参照)PDFドキュメントのカタログ
オブジェクト(詳細は3.6.1のDocument Catalogを参照)。
Encrypt(dictionary): (ドキュメントが暗号化されている場合は必須)
ドキュメントのencryption dictionary(詳細は3.5のEncryptionを参照)
Info(dictionary): (オプション; 必ず間接参照)ドキュメントの
information dictionary(詳細は8.2 Document Information
Dictionary参照)
ID(array): (オプション; PDF1.1)2つの文字列の配列。これらは
どちらもファイルのID(詳細は8.3 File Identifiersを参照)。最初のIDは
ファイルが生成された際に付与され、2番目のものはファイルが更新された
際に付与される。
----
Example 3.6はトレイラーの例で、この例ではファイルは1回も更新を受けていない(これはトレイラーディクショナリ中にPrevエントリが無いことで分かる)。
Example3.6
trailer
<< /Size 22
/Root 2 0 R
/Info 1 0 R
/ID [ <81b14aafa313db63dbd6f981e49f94f4>
<81b14aafa313db63dbd6f981e49f94f4>
]
>>
startxref
18799
%%EOF