トラスト・ソフトウェア・システム
ホーム > 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データ解析や編集をより詳細にできるようにします。

>>>「PDF ファイル構造 -各部-」へ


1.PDFファイル構造 ‐概要‐

PDFデータは、1バイト(8ビット)のシーケンスで構成されています。複数のバイトデータをグループ化たものをトークンとし、それらを組み合わせて更に上位の意味のある組み合わせとしています。あらかじめ決められたトークンは、ASCII文字で構成されており、それらを区切る文字(ホワイトスペースなど)もASCII文字です。そのため、PDFファイルを文書編集アプリケーション(PDFビュワーでなく)で開くと、その多くの部分をASCII文字で確認できます。


PDF Easy Parse 2.0 PDFの構造をより簡単に解析できるPDF Easy Parse ライブラリを用意しました。このPDF Easy Parseを使えば、複雑なPDF構造の中から必要な部分だけを容易に取り出したり、解析したりができます。PDF Easy Parseは、PDF構造の解析専用ライブラリです。
PDF Easy Parseライブラリを使ってPDFファイルの構造を表示するPDF Struct Viewer(PDF構造解析表示)アプリケーションをご参照ください。


PDF構文の説明では、実際のPDFと比較しながらないようを確認してください。手元にあるPDFファイル(パスワードで暗号化されていないもの)を文書編集アプリケーションで開いてください。もし、手元にそれらがないのであれば、HelloWorld.pdfデータをクリックしてください、データとして表示されます。 こちらでは、同じPDFデータ(Helloworld.pdf)が通常どおりに表示されます。


以下は、PDFデータの大まかな構成要素です。


PDF文書のバージョン
開いた文書の先頭を見てください、以下のような行があるはずです。この部分を"File Header"といいます。

%PDF-1.7

数字の“7”の部分は、0,1,2,3,4,5,6 のいずれかとなっているかもしれません。詳細は、「2.1 ヘッダー」を参照してください。


PDFデータの終端
データの最後の行を見てください。以下の行があります。

%%EOF

これもコメントですが、PDFデータの終端を表す特殊な意味を持っています。その終端の前には、PDFのインダイレクトobjectがPDFデータのどの位置(オフセット)に配置されているかを表したクロスリファレンス・テーブルおよびそのオフセットが置かれています。
%%EOFは、PDFの更新によって追加で記載されます。PDFファイルの終端に一番近い位置に記載された%%EOFがそのPDFファイルの最新のものです。


PDF Easy ParseでPDF文書の終端位置を取得するサンプル解析の結果


クロスリファレンス・テーブル
PDFデータに含まれる各オブジェクトのオフセット位置を示したテーブルで、PDFデータの終端に近い位置に置かれています。詳細は、「2.3 クロスリファレンス・テーブル」を参照してください。

以下はクロスリファレンス・テーブルの例です。

xref
0 8
0000000000 65535 f
0000000017 00000 n
0000000376 00000 n
0000000117 00000 n
0000000266 00000 n
0000000544 00000 n
0000000447 00000 n
0000000610 00000 n

ご注意ください、PDFによってはこのようなテーブルが直接記載されていない場合があります。その場合クロスリファレンスの情報は、名前付き(番号で識別された)オブジェクトに格納され多くの場合圧縮されたデータ(これは特別にクロスリファレンス・ストリームといいます、以下を参照してください)で記載されています。


クロスリファレンス・ストリーム
クロスリファレンスの情報は、名前の付いたオブジェクトのストリーム(ストリームを含んだオブジェクトをストリーム オブジェクトといいます)に格納することができます。この情報を含んだオブジェクトをクロスリファレンス・ストリーム(Cross-Reference Stream)といいます。
このクロスリファレンス・ストリームには、上記のクロスリファレンス・テーブルと同様の内容が格納されています。


クロスリファレンスのオフセット
PDFの終端である"%%EOF"の直前に以下のように置かれています。

startxref
665

この数値は、クロスリファレンスが置かれた位置をファイルの先頭からのオフセット値で表しています。その位置を探すと、クロスリファレンス・テーブルもしくは、クロスリファレンス・ストリームが見つかります。

>>>「PDF 構造 -各部-」へ


ご質問、お問い合わせ

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




スリーソフト作者の方へ

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