株式会社インターワーク

PDFってこうなってる? Part 2:PDFファイルの内部構造を理解する

Part 1で学んだPDFの基本構造の知識を土台に、Part 2ではさらに踏み込んでPDFファイルの内部構造を探究します。ヘッダー、ボディ、クロスリファレンステーブル、トレーラーという4つの主要セクションの役割と内容を詳しく解説します。

(更新:
PDFってこうなってる? Part 2:PDFファイルの内部構造を理解する

PDFファイルの基本的な構成要素を見てみましょう。一般的に、PDFファイルは4つの主要なセクションから構成されています。ここでは、最初の2つのセクションに焦点を当てます。

ヘッダーセクション

ファイルがPDFであることを示す部分です。例えば、%PDF-1.3 これはファイルをテキストエディタで開いた際に最初に現れる行で、PDFファイルのバージョンを示しています。ヘッダーの直後には時々、%記号に続いてランダムな文字列がありますが、これは通常、コメントを表しPDFの処理には影響しません。ただし、%PDF-1.3 のような行はPDFのバージョン情報を含み、PDFリーダーにとって重要です。

ボディセクション

PDFの主要な内容が格納されるセクションです。ここにはドキュメント内のすべてのオブジェクトが含まれており、テキストや画像など、PDFを形成するための様々な要素がここに配置されます。

ファイルの構造を理解すると、PDFファイルの作成や編集がより容易になります。次に進む前に、xrefキーワードが含まれるセクションに目を通し、オブジェクトリストの終わり(endobj)を確認してみると良いでしょう。このxrefセクションは、オブジェクト間の参照情報を格納しており、PDF内の様々な部分を効率的に結びつける役割を果たしています。

xrefテーブル

例を挙げましょう:

xref
0 4
0000000003 65535 f
0000017496 00000 n
0000000721 00003 n
0000000000 00007 f

この例に基づいて、PDFファイル内のxrefテーブルがどのように機能するかを説明します。

xrefテーブルは、PDFファイル内のオブジェクトを迅速に識別しアクセスするために使われます。この例では、xrefキーワードの後に続く数字が、テーブルに含まれるオブジェクトの範囲と数を示しています。ここでは「0 4」とあり、オブジェクト0から始まる4つのエントリがあることを意味します。

それぞれのエントリーは、オブジェクトの位置、世代番号、および状態(使用中または未使用)を示します。具体的には:

  • 0000000003 65535 f -- オブジェクト0のエントリ。通常、オブジェクト0はダミーオブジェクトとして使われ、実際には文書内には存在しません。この行では、オブジェクト3へのポインタ(0000000003)、特別な世代番号(65535)、およびオブジェクトの状態(f = free、未使用)が示されています。

  • 0000017496 00000 n -- オブジェクト1のエントリ。ここでは、ファイル先頭からのバイト数(17496)がオブジェクトの位置として、そして世代番号(00000)、状態(n = in use、使用中)が示されています。

  • 0000000721 00003 n -- オブジェクト2のエントリ。バイト位置(721)、世代番号(00003)、状態(n = in use)です。

  • 0000000000 00007 f -- オブジェクト3のエントリ。これは再利用可能な(未使用の)オブジェクトを指し、次に新しいオブジェクトが追加される際に利用される可能性があります。ここでは、次のオブジェクトへのポインタが0(自身を指す)、世代番号(00007)、状態(f = free)が示されています。

これらの情報を通じて、PDFファイルの編集や参照時に特定のオブジェクトを迅速に特定し、アクセスすることができるようになります。

トレーラーセクション

PDFファイルの最後にはトレーラーセクションがあり、ここには文書全体に関する重要な情報が含まれています。以下の事例で説明しましょう。

trailer
<< /Size 4 /Root 1 0 R >>
startxref
1205
%%EOF

トレーラーはディクショナリ形式(<<>>で囲まれた部分)で構成されており、少なくとも2つの重要な情報を含む必要があります。一つはドキュメント内のオブジェクトの総数を示す/Sizeと、もう一つはドキュメントのルートオブジェクトを指す/Rootです。

上記の具体例では、/Size 4がドキュメント内に存在するオブジェクトの数が4つであること、/Root 1 0 Rが1番目のオブジェクトがルートオブジェクトであることを示しています。

トレーラーセクションの後にはstartxrefというキーワードが続き、これはPDFファイルの最初からクロスリファレンステーブル(xref)までのバイト数を示します。

例えば、startxref 1205はファイルの先頭から1205バイトの位置にxrefテーブルが存在することを意味しています。最後に%%EOFがあり、これはファイルの終わりを明示しています。

次のステップ

Part 3:テキストエディタで自作PDFを作成するでは、ここまで学んだ知識を総動員して、実際にゼロからPDFファイルを組み立てます。


PDFアプリ開発ツール(SDK)をお探しのみなさま、効率のよい開発作業のためにJPedal、BuildVu、JDeliがきっとお役に立つことと思います。これら3製品は無料で試用していただけますので、まずはお試しのうえ、ぜひ導入をご検討ください。

開発者向けPDF入門ガイド 表紙
無料 eBook / 25p

開発者向けPDF入門ガイド

PDFの仕様や活用方法など、開発者に必要な情報をコンパクトにまとめました。初めてPDFを扱う開発者にも分かりやすく、基礎から応用までカバーしているため、PDFのポテンシャルを最大限に引き出し、アプリケーション開発やドキュメント管理の効率化を図るための手引きとなるでしょう。

ご興味のある製品:

ご入力いただいた情報は、eBookの送付およびインターワークからのご案内にのみ使用いたします。プライバシーポリシー