Skip to main content
Interwork Corporation
IDR Solutions Product Support Portal
PDF開発用語集 モードの切替 ダーク/ライト/自動 モードの切替 ダーク/ライト/自動 モードの切替 ダーク/ライト/自動

PDF byte offset

PDFバイトオフセットは、PDFファイル内のオブジェクトまたは構造要素の正確な位置を示す数値で、ファイルの先頭からバイト単位で測定されます。

カテゴリ: General PDF Concepts
キーワード: pdf byte offset, PDF byte offset

概要

PDFバイトオフセットは、PDFファイル内のオブジェクトまたは構造要素の正確な位置を示す数値で、ファイルの先頭からバイト単位で測定されます。PDFファイルはバイナリファイルとして設計されており、すべてのオブジェクト、辞書、構造コンポーネントはバイトオフセットを使用して位置を特定できます ( Citation: N.A., (N.A.). (). Document management — Portable document format — Part 2: PDF 2.0 International Organization for Standardization Retrieved from https://www.iso.org/standard/75839.html ) 。このアドレス指定システムにより、ファイル全体を順次読み取る必要なくPDFコンテンツへのランダムアクセスが可能になり、レンダリングとプログラムによる操作の両方でPDFを効率的に処理できます。

定義

PDFにおけるバイトオフセットとは、ファイルの先頭から特定のデータが始まる位置までのバイト数を指定する、ゼロインデックスの整数値です。ページ番号や論理的な文書構造とは異なり、バイトオフセットはファイルのバイナリデータストリーム内の物理的な位置を表します。PDF仕様では、相互参照テーブル(xrefテーブル)でバイトオフセットが広範囲に使用されており、オブジェクト番号を対応するバイトオフセットにマッピングすることで、PDFリーダーがファイル内の任意のオブジェクトを迅速に特定できるようにしています ( Citation: N.A., (N.A.). (). Document management — Portable document format — Part 2: PDF 2.0 International Organization for Standardization Retrieved from https://www.iso.org/standard/75839.html )

バイトオフセットは、PDF内の他の位置指定概念とは異なります。ページインデックスが論理的な文書ページを参照し、コンテンツストリーム座標がレンダリングされたページ上の位置を定義するのに対し、バイトオフセットは純粋にファイルレベルのアドレス指定メカニズムです。開発者が増分更新やlinearized PDFを扱う際は、新しいコンテンツがファイルに追加され、新しい相互参照セクションが古いバイト位置と新しいバイト位置の両方を参照するため、バイトオフセットの理解が重要になります。

重要性

PDF生成、解析、または操作ライブラリを扱う開発者にとって、バイトオフセットはPDFリーダーがコンテンツを見つける方法を理解する上で基本的な要素です。PDF問題のデバッグやカスタムPDF処理ロジックの実装において、相互参照テーブルがオブジェクト番号をバイトオフセットにマッピングしていることを知ることで、破損したxrefテーブルが「ファイルが破損しています」エラーを引き起こす理由を説明できます。この知識は特に以下の場合に重要です。

  • ファイル全体を書き換えずに新しいオブジェクトを追加する増分保存操作を実装する場合
  • Webストリーミング用に最適化されたlinearized PDFを扱う場合(バイトオフセット構造により段階的なレンダリングが可能)
  • 16進エディタで生のファイル構造を調べてPDFファイルを手動でデバッグする場合
  • 破損した相互参照テーブルを再構築するPDF修復ツールを実装する場合
  • ランダムアクセスパターンを理解してPDF処理のパフォーマンスを最適化する場合

バイトオフセットを理解することで、PDFファイルを単純に連結できない理由や、テキストエディタでPDFを変更してはいけない理由も認識できるようになります。ファイルコンテンツの変更は、後続のすべてのバイトオフセットをシフトさせ、相互参照テーブルを無効化してしまいます。

仕組み

すべてのPDFファイルは、バイトオフセット0の位置にヘッダー(通常は%PDF-1.7または類似のもの)で始まります。ファイル構造は、ヘッダー、ボディ(オブジェクトを含む)、相互参照テーブル、トレーラーの4つの主要セクションで構成されています。ファイルの終わり近くにある相互参照テーブルには、各オブジェクト番号をボディセクション内のバイトオフセットにマッピングするエントリが含まれています ( Citation: N.A., (N.A.). (). Document management — Portable document format — Part 2: PDF 2.0 International Organization for Standardization Retrieved from https://www.iso.org/standard/75839.html )

PDFリーダーがファイルを開くと、まずファイルの終わりからトレーラーを読み取ります。トレーラーには相互参照テーブルの開始位置のバイトオフセットが含まれています。次にリーダーはそのオフセットにジャンプし、相互参照テーブルをメモリにロードし、それをインデックスとして使用してファイル内の任意のオブジェクトを特定します。例えば、相互参照エントリがオブジェクト15がバイトオフセット3421に位置していることを示している場合、リーダーはファイル内の位置3421に直接シークしてそのオブジェクトを読み取ることができます。

アクセシビリティ機能を提供するTagged PDFファイルでは、バイトオフセットメカニズムは同じですが、構造要素とそれに関連するコンテンツを特定するために使用されます ( Citation: N.A., (N.A.). (). Document management applications — Electronic document file format enhancement for accessibility — Part 1: Use of ISO 32000-1 (PDF/UA-1) International Organization for Standardization Retrieved from https://www.iso.org/standard/64599.html ) 。構造ツリーはオブジェクト番号でオブジェクトを参照し、それらは相互参照テーブルを介してバイトオフセットに解決されます。

相互参照ストリーム(PDF 1.5で導入)は、バイトオフセットを圧縮形式で保存しますが、同じ目的を果たします。Linearized PDFは、ネットワーク経由のストリーミング時により高速な初期表示を可能にするため、最初のページのオブジェクトをファイルの先頭に配置するようにバイトオフセットを再編成します。増分更新は、以前のセクションを置き換えるのではなく補完する新しい相互参照セクションを追加し、新しいオブジェクトはファイルの終わりに書き込まれ、そのバイトオフセットは新しいxrefセクションに記録されます。

関連用語

  • 相互参照テーブル(Cross-reference table)– PDFオブジェクト番号をファイル内のバイトオフセットにマッピングするインデックス構造
  • PDFオブジェクト(PDF object)– バイトオフセットを介して特定できる、PDFファイルの基本的なデータ構造(辞書、ストリーム、配列など)
  • Linearized PDF – Webストリーミングと段階的表示のためにバイトオフセット配置を最適化したPDFファイル構成
  • 増分更新(Incremental update)– ファイル全体を書き換えずに新しいコンテンツと相互参照情報を追加するPDF変更手法
  • PDFトレーラー(PDF trailer)– 相互参照テーブルを指すバイトオフセットを含む、PDFファイルの最終セクション

出典

(N.A.) (2020)
(N.A.). (). Document management — Portable document format — Part 2: PDF 2.0 International Organization for Standardization Retrieved from https://www.iso.org/standard/75839.html
(N.A.) (2014)
(N.A.). (). Document management applications — Electronic document file format enhancement for accessibility — Part 1: Use of ISO 32000-1 (PDF/UA-1) International Organization for Standardization Retrieved from https://www.iso.org/standard/64599.html