PDFファイルの基本的な構成要素を見てみましょう。一般的に、PDFファイルは4つの主要なセクションから構成されています。ここでは、最初の2つのセクションに焦点を当てます。
ヘッダーセクション: ファイルがPDFであることを示す部分です。 例えば、%PDF-1.3
これはファイルをテキストエディタで開いた際に最初に現れる行で、PDFファイルのバージョンを示しています。ヘッダーの直後には時々、%記号に続いてランダムな文字列がありますが、これは通常、コメントを表しPDFの処理には影響しません。ただし、%PDF-1.3
のような行はPDFのバージョン情報を含み、PDFリーダーにとって重要です。
ボディセクション: PDFの主要な内容が格納されるセクションです。ここにはドキュメント内のすべてのオブジェクトが含まれており、テキストや画像など、PDFを形成するための様々な要素がここに配置されます。
ファイルの構造を理解すると、PDFファイルの作成や編集がより容易になります。次に進む前に、xrefキーワードが含まれるセクションに目を通し、オブジェクトリストの終わり(endobj)を確認してみると良いでしょう。このxrefセクションは、オブジェクト間の参照情報を格納しており、PDF内の様々な部分を効率的に結びつける役割を果たしています。
例を挙げましょう:
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
<>
startxref
1205
%%EOF
トレーラーはディクショナリ形式(<<と>>で囲まれた部分)で構成されており、少なくとも2つの重要な情報を含む必要があります。一つはドキュメント内のオブジェクトの総数を示す/Sizeと、もう一つはドキュメントのルートオブジェクトを指す/Rootです。
上記の具体例では、/Size 4がドキュメント内に存在するオブジェクトの数が4つであること、/Root 1 0 Rが1番目のオブジェクトがルートオブジェクトであることを示しています。
トレーラーセクションの後にはstartxrefというキーワードが続き、これはPDFファイルの最初からクロスリファレンステーブル(xref)までのバイト数を示します。
例えば、startxref 1205
はファイルの先頭から1205バイトの位置にxrefテーブルが存在することを意味しています。最後に%%EOFがあり、これはファイルの終わりを明示しています。
PDFアプリ開発ツール(SDK)をお探しのみなさま、効率のよい開発作業のためにJPedal、BuildVu、JDeliがきっとお役に立つことと思います。
これら3製品は無料で試用していただけますので、まずはお試しのうえ、ぜひ導入をご検討ください。
JPedal、BuildVu、JDeliのシステム開発やプログラミング、無料トライアルの情報は下記の各製品のトライアルページをご覧ください。技術的なことから費用面まで、ご質問・ご相談も各製品ページの問合せボタンからお寄せください。