PDF 2.0:何が変わったのか
ISO 32000-2 Evidence: Standard-backed
一目でわかる要点
「一目でわかる要点」という見出しのセクションPDF 2.0 は ISO 32000-2 です。これは Adobe ではなく ISO が完全に所有する初めての PDF 仕様です。抜本的な作り直しというよりも、その大半は 1.7 の 統合と整理 です。このページでは、実際に何が変わったのか、それらの変更のうち実務で影響を実感するものはどれか、そして NextPDF がデフォルトで 2.0 ベースラインをどのように対象としつつ、プロファイルが要求する場合には古いファイル構造も書き出せるのかを解説します。
なぜこれが重要なのか
「なぜこれが重要なのか」という見出しのセクション「PDF 2.0」という名前からは、別のフォーマットであるかのように聞こえるかもしれません。しかし、そうではありません。2.0 ファイルは 1.7 と同じオブジェクトモデル、xref、トレーラーを使うため、実際の変更は過小評価されがちです。問題になりやすい変更は、目立つ新機能ではありません。むしろ 締め付け です。つまり、1.7 では任意だったものが今は前提とされるルールや、静かに 削除 された機能です。完全に有効だった 1.7 ファイルが、目に見える違いを一切伴わずに 2.0 では非準拠となりうるのです。
これが重要であるもう一つの理由は、設計の方向性です。NextPDF は PDF 2.0 エンジンです。2.0 が何を前提とし、どこで意図的に 1.7 と異なるのかを知れば、なぜエンジンが一部の入力を拒否し、フォントをより厳格に埋め込み、テーブルではなくクロスリファレンスストリームをデフォルトとするのかを筋道立てて理解できます。
- PDF 2.0 = ISO 32000-2。ISO が所有し、1.7 を置き換えるものではなく拡張したものです。
- ヘッダーは
%PDF-2.0になります。準拠ライターは、ヘッダー または カタログの/Versionにバージョンを 2.0 として記載します。 - ファイル構造のほとんどは 変わりません。間接オブジェクト、トレーラー、
startxref/%%EOFの規則も同じです。 - クロスリファレンス ストリーム が 2.0 の自然なデフォルトです。従来の 20 バイトのテーブルも依然として有効で、一部の PDF/A プロファイルでは今なお必須です。
- 2.0 は機能を 追加 し(たとえば、より充実した関連ファイルと文書パート構造、AES-256-GCM 拡張によるより強力な暗号化)、機能を 削除 します(一部の構造タグ、厳格化されたフォント埋め込みの要件、非推奨となった CJK 文字コレクション)。
- NextPDF はデフォルトで 2.0 を対象とし、準拠プロファイルが要求する場合には 1.7/1.4 構造をシリアライズできます。
NextPDF のアプローチ
「NextPDF のアプローチ」という見出しのセクションバージョンは、シリアライゼーション戦略という一箇所で表現される 判断 です。
Pdf20StreamStrategy(src/Writer/Pdf20StreamStrategy.php)は %PDF-2.0 ヘッダーを書き出し、カタログバージョンとして /2.0 を報告し、圧縮されたクロスリファレンス ストリーム を出力します。また、2.0 のフォントに関する締め付けも直接担います。2.0 プロファイルでは、埋め込まれていない標準 Type 1 フォントについて単に警告するだけでなく、埋め込みを 強制 できます。標準が今やそれらのフォントの埋め込みを前提としているからです。2 つのテーブル戦略(Pdf17TableStrategy、Pdf14TableStrategy)が存在するのは、まさに一部のプロファイルが古い形式を必要とするからです。PDF/A-2/-3 は従来のクロスリファレンステーブルを必須とし、PDF/A-1 はさらにオブジェクトストリームとクロスリファレンスストリームを禁止します。3 つの戦略はすべて単一の PdfSerializationStrategy インターフェースを実装するため、その境界より上のライターは同一です。変わるのは trailer/xref の形状だけです。
より強力な暗号化も、同じく意図的な形で組み込まれています。PdfXrefWriter(src/Writer/PdfXrefWriter.php)は、AES-256-GCM のオプトイン(2.0 への ISO/TS 32003 拡張)を暗号化辞書へ伝播させ、出力されるハンドラーバージョンと暗号モードのエントリが実際に生成されるバイトと一致するようにします。エンジンが、ある暗号方式を表明しながら別のものを書き出すことはありません。
全体設計はこうです。2.0 がデフォルトです。古い構造は、偶然ではなく意図的に選べるようになっています。そして 2.0 がルールを締め付けている箇所では、NextPDF はそれを暗黙に緩めるのではなく、締め付けられた線を保持できます。
- Step 1 of 3: ISO 32000-1 PDF 1.7 — the Adobe-authored base, adopted by ISO
- Step 2 of 3: ISO 32000-2 PDF 2.0 — ISO-owned consolidation, tightening, and additions
- Step 3 of 3: ISO/TS 32003 AES-256-GCM (AESV4) — an encryption extension to PDF 2.0
根拠が示すこと
「根拠が示すこと」という見出しのセクションバージョン記述は規範的です。 Spec: ISO 32000-2, §7.5.2 ISO 32000-2 §7.5.2 は、準拠ファイルを書き出すプロセッサがバージョンを 2.0 として識別 しなければならない(ヘッダーまたはカタログの /Version エントリのいずれか)と規定し、ヘッダーは単一の行末マーカーが続く %PDF-1.n または %PDF-2.n であるとします。
Spec: ISO 32000-2, §7.7.2 ISO 32000-2 §7.7.2 はさらに、カタログの
/Version が先行するヘッダーバージョンを上書きすると規定します。これにより、
インクリメンタルなバージョン引き上げが可能になります。 Evidence: Standard-backed
2.0 が書き直しではなく統合であることは、それが 保持するもの に表れています。クロスリファレンスストリーム(/Type /XRef)は PDF 1.5 で導入され、2.0 のデフォルトとして引き継がれた、同じ機構です( Spec: ISO 32000-2, §7.5.8 ISO 32000-2 §7.5.8 )。間接オブジェクト、トレーラー、startxref の構造は、前のページの説明から変わっていません。
重要な変更は、削除と締め付けです。標準は、PDF 1.7 標準構造名前空間に存在した 6 つの標準構造要素が PDF 2.0 名前空間の一部 ではない ことを示しています。すなわち Art、BlockQuote、TOC、Reference、BibEntry、そして Code です( Spec: ISO 32000-2, Annex L.3 ISO 32000-2 Annex L.3 。名前空間の差異は Spec: ISO 32000-2, §14.8.6 ISO 32000-2 §14.8.6 に定義されています)。また、14 種類の標準 Type 1 フォントについてもルールを締め付けます。1.0〜1.7 ではそれらの辞書がメトリクスエントリを省略できましたが、2.0 はその許容を廃止しています( Spec: ISO 32000-2, §9.6.2.1 ISO 32000-2 §9.6.2.1 )。さらに、定義済みの CJK 文字コレクションを改訂します。たとえば、Adobe-Korea1 は 2.0 で非推奨となりました。Adobe-KR が追加されました。これらのいずれも、既存ページの 見た目 を変えるものではありません。しかしいずれも、それが 準拠するかどうか を変えうるのです。
| カテゴリ | 例(2.0 対 1.7) | 見た目は変わるか | なぜ重要か |
|---|---|---|---|
| 変更なし | 間接オブジェクト、トレーラー、startxref/%%EOF、xref ストリーム | — | 2.0 は同じオブジェクトモデル。ほとんどのツールはそのまま利用可能 |
| 追加 | より充実した関連ファイル/文書パート構造。AES-256-GCM 暗号化(ISO/TS 32003) | いいえ | オプトイン型の新機能。古いリーダーは安全に無視可能 |
| 締め付け | 標準 14 フォントは埋め込み前提。メトリクスはもはや省略不可 | いいえ | 有効な 1.7 ファイルが非準拠の 2.0 ファイルになりうる |
| 削除 | 1.7 名前空間の構造要素 6 つ(Art、BlockQuote、TOC、Reference、BibEntry、Code)。非推奨の CJK コレクション(たとえば Adobe-Korea1) | いいえ | サイレント。準拠喪失を示す目に見える兆候なし |
重要な PDF 2.0 の変更は、圧倒的に目に見えません。すなわち、あなたがオプトインする追加と、準拠を変えながらもレンダリングされる 1 ピクセルすら変えない tightenings/removals です。
2.0 ファイルと 1.7 ファイルの 目に見える 違いは、その背後にある準拠ルールが大きく異なるにもかかわらず、しばしば 2 行だけ ── ヘッダーとカタログのバージョン ── です。
%PDF-2.0 % was %PDF-1.7...1 0 obj<< /Type /Catalog /Version /2.0 % catalog states 2.0; overrides header if later /Pages 2 0 R >>endobj...% Cross-reference STREAM is the 2.0 default (was often a 20-byte table)99 0 obj<< /Type /XRef /Size 100 /W [1 2 2] /Filter /FlateDecode /Root 1 0 R >>stream<binary xref entries>endstreamendobjstartxref12345%%EOFリーダーには %PDF-2.0 と /Version /2.0 が見えます。リーダーには見えず、準拠チェッカーには見えるのは、このファイルが今や標準フォントの埋め込みを求められ、2.0 が削除した構造タグを使ってはならない、ということです。異なるバイトはわずかです。ルールの違いは、わずかではありません。
よくある誤解
「よくある誤解」という見出しのセクション落とし穴は「PDF 2.0 を出力しているのだから、以前より準拠性が高い」という思い込みです。%PDF-2.0 と書くことは 主張 であって、保証ではありません。ファイルは 2.0 ヘッダーを持ちながら、1.7 では許容されていたのとまさに同じやり方で ── 埋め込まれていない標準フォントを参照したり、2.0 が削除した機能を使ったりして ── 2.0 に違反しうるのです。バージョンマーカーは、ファイルが測られる基準を引き上げます。それがファイルをその基準の上へ持ち上げてくれるわけではありません。逆向きの誤りは、ヘッダーを変えるだけで 1.7 ファイルが 2.0 として機能すると思い込むことです。多くの場合、見た目はまったく同じにレンダリングされ、それでも 準拠に失敗します。締め付けは目に見えなくても実在するからです。
限界と境界
「限界と境界」という見出しのセクション2.0 ベースラインを対象とするということは、NextPDF がデフォルトで 2.0 ファイル構造を採用し、2.0 の締め付けられたルールを保持できるということです。それは、あらゆる任意の 2.0 機能が実装されていることを意味 しません。また、2.0 ヘッダーを出力することが、文書を PDF/A、PDF/UA、その他いずれかのプロファイルとして認証することを意味するわけでもありません。それらは基本仕様の上に重ねられた、より厳格な独立の準拠目標であり、それぞれが独自の検証を持ちます。
このページは、ISO 32000-2 対 32000-1 の網羅的な変更ログではなく、バージョン差異への実務的な手引きです。特定の 2.0 機能や非推奨がエンジンの挙動を左右する場合、その挙動はそれ自体の条項に結びつけられています。このページは、条項レベルの差分を一つずつ列挙するのではなく、その全体像を地図のように示します。
ミニ FAQ
「ミニ FAQ」という見出しのセクションPDF 2.0 は 1.7 リーダーと後方互換ですか? 変わっていない構造については、おおむね互換です。新しい 2.0 機能は一般に、古いリーダーが理解できないものを無視できるように設計されています。ただし、2.0 専用の機能は 1.7 リーダーでは尊重されません。
ヘッダーとカタログの /Version はどちらが優先しますか? カタログの /Version は、ヘッダーより 新しい バージョンを示す場合に優先します。これが、ヘッダーを書き換えずにインクリメンタル更新でファイルのバージョンを引き上げられる仕組みです。
なぜ NextPDF はテーブルではなくクロスリファレンスストリームをデフォルトとするのですか? クロスリファレンスストリームは PDF 2.0 の自然な機構です ── コンパクトで、圧縮オブジェクトのインデックスを作成できます。20 バイトのテーブルは、プロファイル(とりわけ一部の PDF/A レベル)が要求する場合に今なお書き出されます。
関連ドキュメント
「関連ドキュメント」という見出しのセクション- PDF とは実際に何か ── PDF 2.0 が 1.7 から保持しているオブジェクトモデルと xref。
- 標準の全体像 ── NextPDF が追跡する標準群の中で ISO 32000-2 がどこに位置し、条項がどのように挙動に反映されるのか。
- フォント:難所 ── フォント埋め込みの締め付けは、実際に体感する 2.0 の変更の一つです。
- PDF 2.0 ── ISO 32000-2 として標準化された PDF 仕様。Adobe ではなく ISO が所有する初めての版です。
- ISO 32000-1 ── Adobe の PDF 1.7 を ISO で標準化したもの。PDF 2.0 が拡張する基盤です。
- ISO/TS 32003 ── PDF 2.0 を AES-256-GCM(AESV4)暗号化で拡張する技術仕様。
- カタログ
/Version── PDF バージョンを記載する文書カタログのエントリ。より新しいバージョンを示す場合、ヘッダーを上書きします。 - クロスリファレンスストリーム ── PDF 1.5 以降/2.0 のクロスリファレンス機構(
/Type /XRef)。NextPDF のデフォルトであり、古いプロファイル向けに従来のテーブルも依然として利用できます。 - 締め付け(tightening) ── 1.7 では任意または許容されていたが、2.0 では前提とされるか必須となるルール。見た目を変えずに準拠性を変えます。