PDFファイル形式解説:構造、レイヤー、標準規格
PDFには何が格納されているのでしょうか?ヘッダー、ボディ、xref、トレーラーの4つの物理セクション、テキスト、画像、フォント、注釈、ベクトル、署名の6つのコンテンツレイヤー、メタデータ、そしてその上に構築されたISO規格(PDF/A、PDF/X、PDF/UA、PDF/E、PDF/VT)を網羅した図解と用語集。
PDFは単一のファイルではありません。ディスク上の特定の構造を持つバイナリコンテナであり、そのコンテナ内に積み重ねられたコンテンツレイヤーのセット、そして基本仕様の上に構築された一連のISO規格です。ヘックスエディタで開くと、最初の数行に構造がプレーンテキストで表示されます。ビューアで開くと、レイヤーが単一のページとしてレンダリングされます。
このガイドは、物理的なファイル構造、ボディが保持するコンテンツレイヤー、すべてを囲むメタデータ、そして特定のユースケースのためにそれを制約する規格(PDF/A、PDF/X、PDF/UA、PDF/E、PDF/VT)をラベル付きで参照するものです。

この図をブログで使用したいですか? この埋め込みコードをコピーしてください:
4つの物理セクション
ディスク上のすべてのPDFは、この順序で同じ4つの部分からなる構造を持っています。
1. ヘッダー
ファイルの最初の行。常に「%PDF-」で始まり、その後にバージョン番号が続きます。
%PDF-1.7バージョンは 1.0(1993年リリース)から 2.0(2017年リリース、現行)まであります。ヘッダーの後には、FTPなどの転送ツールにこれがバイナリファイルであることを示すバイナリバイトを含むコメント行が続きます。
2. ボディ - 間接オブジェクト
ファイルの大部分。すべてのページ、フォント、画像、注釈、フォームフィールドは、番号付きの間接オブジェクトです。
1 0 obj
<< /Type /Catalog /Pages 2 0 R >>
endobj
2 0 obj
<< /Type /Pages /Kids [3 0 R] /Count 1 >>
endobj
3 0 obj
<< /Type /Page /Parent 2 0 R /Contents 4 0 R /Resources << ... >> >>
endobj各オブジェクトにはID(0 obj の前の数字)、世代番号(インクリメンタルアップデートで使用される 0)、および辞書の場合は << と >> の間、バイナリストリーム(画像データ、フォントデータ、圧縮コンテンツ)の場合は stream と endstream の間のペイロードがあります。
オブジェクトは <id> <gen> R 構文(例:「3 0 R」は「オブジェクト3、世代0」を意味します)で互いに参照します。これにより、ページが使用するフォントを参照したり、カタログがページツリーのルートを参照したりします。
3. クロスリファレンステーブル (xref)
バイトオフセットのルックアップテーブル。ボディ内のすべてのオブジェクトについて、xrefはファイル内の絶対バイト位置を記録します。
xref
0 6
0000000000 65535 f
0000000017 00000 n
0000000089 00000 n
0000000172 00000 n
0000000299 00000 n
0000000453 00000 nこれがPDFがランダムアクセス可能である理由です。ビューアはxrefを読み、オブジェクト3のバイトオフセットに直接ジャンプして、残りのファイルを解析せずにそのページをレンダリングできます。これが、ソースファイルが500ページでも、単一章のPDFが即座に開く理由です。
4. トレーラー
最後のセクション。パーサーにxrefの場所とルートオブジェクトがどれかを伝えます。
trailer
<< /Size 6 /Root 1 0 R /Info 7 0 R >>
startxref
1893
%%EOFstartxref の値はxrefテーブルのバイトオフセットです。%%EOF マーカーはファイルの実際の終了を示します。トレーラーはインクリメンタルアップデートを可能にします:新しいxrefとトレーラーを末尾に追加することで、ファイル全体を書き直さずにオブジェクトを追加できます。
6つのコンテンツレイヤー
ボディ内では、コンテンツは6種類のレイヤータイプに格納されています。レンダリングされたすべてのPDFページは、これらのレイヤーの複合体です。
1. テキスト
テキスト文字列ではなく、グリフの位置コマンドとフォント参照です。PDFは、「文字Aをここに描画する」のではなく、「フォントF3のグリフ42を位置(120, 540)に描画する」といった指示を格納します。これがテキストが選択可能で検索可能である理由です。ビューアは、ToUnicodeマッピング(またはCJKフォントの場合はCMap)を介してグリフIDをUnicodeコードポイントに逆マッピングします。
テキストに ToUnicode マッピングがない場合、「選択可能なテキストがコピーするとゴミになるPDF」という古典的な問題が発生します。テキストは表示されますが、グリフからUnicodeへのマッピングが破損しているか、存在しない状態です。
2. 画像
いくつかの形式の埋め込みストリームとして格納されます。
- JPEG (DCTDecodeフィルター):写真、最も一般的
- JPEG2000 (JPXDecode):圧縮率が高い、あまり一般的ではない
- PNG相当 (FlateDecode + Predictor):スクリーンショット、線画
- CCITT Group 4 (CCITTFaxDecode):白黒スキャンテキスト、アーカイブスキャンで使用
- JBIG2 (JBIG2Decode):バイレベル画像、OCR処理されたドキュメントで一般的
画像は、他のコンテンツに影響を与えることなく、ダウンサンプリング、再圧縮、または置き換えが可能です。
3. フォント
完全なフォントプログラム、サブセット(使用されたグリフのみを含む)、または名前で参照(ビューアのシステムにインストールされている必要がある)として埋め込まれます。サブセット化がデフォルトであり、ファイルサイズを劇的に削減します。サポートされるフォント形式:Type1、TrueType、OpenType、CIDFont(CJK用)。
フォントが参照されているが埋め込まれておらず、ビューアのシステムにインストールされていない場合、ビューアは類似のフォントに置き換えます。これは通常、見た目が悪くなります。PDF/Aは、これを防ぐためにすべてのフォントの埋め込みを要求します。
4. 注釈
ハイライト、コメント、リンク、スタンプ、透かし、フォームフィールドはすべて注釈です。これらはページコンテンツの上にレイヤー化され、元のページを変更せずに、追加、編集、または削除できます。
フォームフィールドは特別なケースです。インタラクティブなウィジェット注釈(表示部分)とフィールド辞書(データ部分)で構成されます。フォームに記入して保存する場合、フィールド辞書のみが変更され、ページ自体は変更されません。
5. ベクトルグラフィックス
PostScriptライクな演算子(moveto、lineto、curveto)で描画された線、形状、曲線、パス。品質を損なうことなく無限にスケールします。PDF内のほとんどのCADエクスポート、チャート、図はベクトルグラフィックスです。
6. デジタル署名
ファイルのバイト範囲に紐付けられたPKIベースの署名。署名辞書は、「バイト0から12,547、および14,200からファイルの終わりまでが署名されている」と指定します。中央の小さな範囲は、署名値自体のために予約されています。署名されたバイト範囲へのいかなる変更も署名を無効にし、PDFが署名後の改ざんを検出する方法です。
一部のPDFには複数の署名があり、インクリメンタルアップデートとしてレイヤー化されています。各署名者は、受け取った時点のファイルに署名し、チェーンを維持します。
メタデータ:2つの並列システム
PDFには、しばしば矛盾する2つのメタデータシステムがあります。
標準 /Info辞書
トレーラーに格納されます。フィールド:Title、Author、Subject、Keywords、Creator(ドキュメントを作成したアプリ)、Producer(PDFを生成したアプリ)、CreationDate、ModDate。プレーンテキスト文字列で、どのPDFツールでも簡単に読み取れます。
XMPメタデータストリーム
別のXMLストリーム(Adobe XMP、RDF/XMLベース)で、よりリッチなスキーマをサポートします:Dublin Core、IPTC、カスタムドメイン固有スキーマ(カラープロファイル、著作権登録、原稿バージョン管理)。
最新のPDFジェネレーターは両方に書き込みます。古いPDFには /Info のみがあります。一部のPDFには、以前のバージョンからの古い /Info と、最近の編集による正確なXMP(またはその逆)があります。コンプライアンスまたはフォレンジックのためにPDFを監査する場合、両方を確認してください。
PDF上に構築されたISO規格
ベースとなるPDF仕様はISO 32000です。いくつかの派生規格が、特定のユースケースのためにPDFを制約しています。
| 標準 | 使用目的 | 制約 |
|---|---|---|
| PDF/A | 長期アーカイブ | すべてのフォント埋め込み、JavaScriptなし、オーディオ/ビデオなし、デバイスに依存しないカラースペース。準拠レベル:PDF/A-1、A-2、A-3(ファイル添付可能) |
| PDF/X | 印刷制作 | CMYKカラー、フォントとカラープロファイルの埋め込み、透明度なし(PDF/X-1a)または制御された透明度(PDF/X-4) |
| PDF/UA | アクセシビリティ | タグ付き構造ツリー、言語メタデータ、画像の代替テキスト、論理的な読み取り順序 |
| PDF/E | エンジニアリング | 3Dモデル(U3D、PRC形式)、CAD固有メタデータ |
| PDF/VT | 変数トランザクション印刷 | 大量パーソナライズドメール用に最適化 |
PDFは複数の標準に同時に準拠できます。PDF/A-2u(Unicodeマッピング付きアーカイブ)とPDF/UA(アクセシビリティ)の組み合わせは、政府および法律アーカイブで一般的です。
リニアライズドPDF(Web最適化)
「リニアライズド」または「Web最適化」されたPDFは、ボディを並べ替えて、最初のページのオブジェクトがファイルの前の方に表示されるようにします。Webビューアは、ファイル全体を待つ代わりに、最初の約50KBをダウンロードしただけでページ1をレンダリングできます。トレーラーは先頭に複製され、各ページの開始位置を示すヒントテーブルが追加されます。
ほとんどの最新のPDFジェネレーターは、リニアライズを「Web用に保存」オプションとしてサポートしています。この形式は、低速接続での高速な初回ページレンダリングと引き換えに、ファイルサイズを2〜5%増加させます。
暗号化と権限
PDFはパスワード(または証明書)で暗号化でき、印刷、テキストコピー、変更、フォーム記入、アクセシビリティ抽出などの詳細な権限を付与できます。暗号化はトレーラーの /Encrypt 辞書に格納されます。
暗号化の強度は進化してきました:RC4 40ビット(初期のPDF、今日では簡単にクラックされる)、RC4 128ビット(まだ弱い)、AES-128、AES-256。オリジナルのAcrobat 5 RC4実装は2001年に公開クラックされました。最新のPDF暗号化(AES-256、PDF 2.0)は、強力なパスワードで使用されれば安全です。
注意:「権限」は助言的なものです。それらを尊重するビューアはそれらを強制します。それらを無視するビューア(または暗号化を削除するツール)はそうしません。
PDFSubによるPDFの読み取り方法
PDFSubは、RustのPDFiumバインディング(ChromiumのPDFビューアを支えるエンジンと同じ)と、スキャンされたドキュメント用のPaddleOCRを使用してPDFを処理します。完全なアーキテクチャの詳細とクラウドベースツールとの比較については、ブラウザ対クラウドPDFセキュリティを参照してください。
上記で説明した構造を維持しながらPDFを他の形式に変換するには:
- PDFからExcelへ - テキストとテーブルを抽出し、座標を保持します
- OCR PDF - スキャンされたPDFに検索可能なテキストレイヤーを追加します
- PDFからWordへ - テキストを編集可能な段落に再フローします
- PDF圧縮 - 画像をダウンサンプリングし、フォントをサブセット化します
特にアーカイブワークフローについては、PDFをPDF/Aに変換する方法を参照してください。
さらに読む
- ISO 32000-2 (PDF 2.0仕様) - 正式な参照資料、有料
- Adobe PDFリファレンスアーカイブ - PDF 1.7の無料リファレンス
- PDF Association - 業界ワーキンググループ、無料記事と準拠テストファイル
PDF固有のトピックについては:弁護士向けPDFコンプライアンスガイド、PDF/A変換ガイド。