Incremental update
Incremental updateは、PDF仕様で定義されているメカニズムで、文書全体を書き直すのではなく、ファイルの末尾に変更を追加することでPDF文書を修正できます。
Incremental updateは、PDF仕様 ( Citation: N.A., 2020 (N.A.). (2020). Document management — Portable document format — Part 2: PDF 2.0 . International Organization for Standardization Retrieved from https://www.iso.org/standard/75839.html ) で定義されているメカニズムで、文書全体を書き直すのではなく、ファイルの末尾に変更を追加することでPDF文書を修正できます。このアプローチは元のコンテンツを保持しながら、新しいまたは修正されたオブジェクト、新しいcross-referenceセクション、新しいtrailerを追加します。Incremental updateは効率的な文書修正を可能にし、デジタル署名や文書のバージョン管理などの機能をサポートします。
Incremental updateは、PDF文書を修正する際の構造的アプローチで、PDFをゼロから再生成するのではなく、既存ファイルの末尾に追加として変更を書き込む手法です。 ( Citation: N.A., 2020 (N.A.). (2020). Document management — Portable document format — Part 2: PDF 2.0 . International Organization for Standardization Retrieved from https://www.iso.org/standard/75839.html ) によると、PDFがIncremental updateされる場合、元のbody、cross-referenceテーブル、trailerはそのまま残り、新しいまたは修正されたオブジェクトが、更新されたcross-referenceセクション(またはcross-referenceストリーム)および前のtrailerを指す新しいtrailerとともに追加されます。
これは、ファイル構造全体が再生成される完全なPDF書き直しとは異なります。Incremental updateはファイル内に階層的な履歴を作成し、各updateセクションが特定の変更セットを表します。PDFリーダーはこれらのセクションを順次処理し、後のオブジェクトが同じオブジェクト番号の以前のバージョンを上書きします。
PDF操作を行う開発者にとって、Incremental updateは以下のような重要な利点を提供します。
パフォーマンス: 変更の追加は、大規模な文書の書き直しよりも大幅に高速です。特に、フォームフィールドの値や注釈の追加など、わずかな修正のみが必要な数メガバイトのファイルに対して効果的です。
デジタル署名の保持: Incremental updateは、有効なデジタル署名を維持するために不可欠です。署名済みPDFに追加のコンテンツ(承認スタンプやフォームデータなど)が必要な場合、Incremental updateを使用することで既存の署名を無効化せずにこれらの変更を行えます。
変更追跡: 階層構造により、各Incremental updateセクションが独自のタイムスタンプを持つ個別の修正イベントを表すため、フォレンジック分析やバージョン追跡が可能になります。
ネットワーク効率: 共同作業やクラウドベースのアプリケーションでは、Incremental updateは文書全体ではなく変更のみを送信することで、帯域幅の要件を削減します。
Incremental updateの技術的実装は、以下の構造に従います。
元のPDF構造: 標準的なPDFは4つのセクションで構成されます。header、body(オブジェクト)、cross-referenceテーブル(xref)、trailerです。trailerにはxrefテーブルへのバイトオフセットが含まれます。
変更の追加: Incremental updateを行う際、新しいまたは修正されたオブジェクトは、元のファイルの%%EOFマーカーの後に追加されます。各修正されたオブジェクトは元のオブジェクト番号を保持しますが、新しい世代番号(通常は1つインクリメント)を受け取ります。
新しいcross-referenceセクション: 新しく追加または修正されたオブジェクトのエントリを含む新しいxrefテーブルまたはcross-referenceストリームが追加されます。この新しいxrefセクションは元のものを置き換えるのではなく、補完します。
新しいtrailer: 前のxrefテーブルのバイトオフセットを指す/Prevエントリを含む新しいtrailer辞書が追加され、updateのチェーンが作成されます。trailerには、オブジェクトの総数を反映する更新された/Sizeエントリも含まれます。
解決順序: PDFリーダーは、まず最後のtrailerを読み取り、次に/Prevチェーンを逆方向にたどることでファイルを処理します。オブジェクト番号が複数のxrefセクションに現れる場合、最新のバージョン(ファイルの先頭から最も遠い)が優先されます。
バイト範囲の考慮事項: デジタル署名された文書の場合、署名の/ByteRangeエントリは、ファイルのどの部分が署名でカバーされているかを指定します。通常、署名値自体は除外され、その後のIncremental updateが許可されます。
- Cross-referenceテーブル – PDFファイル内のオブジェクト番号からバイトオフセットへのマッピングを行うインデックス構造
- Trailer辞書 – cross-referenceテーブルの位置を特定し、文書レベルの情報を定義するPDFの末尾にあるメタデータセクション
- Object stream – ファイルサイズを削減するために複数のPDFオブジェクトを格納する圧縮コンテナ
- Digital signature – 文書の真正性を検証し、改ざんを検出するための暗号化メカニズム
- Linearized PDF – ページコンテンツを段階的に配信する高速Web表示用に最適化されたPDF構造
- (N.A.) (2020)
- (N.A.). (2020). Document management — Portable document format — Part 2: PDF 2.0 . International Organization for Standardization Retrieved from https://www.iso.org/standard/75839.html
