PDF ファイル形式 - PDF ファイルとは?
Portable Document Format (PDF) は、1990 年代に Adobe によって作成されたドキュメントの一種です。このファイル形式の目的は、ドキュメントやその他の参考資料を、アプリケーション ソフトウェア、ハードウェア、およびオペレーティング システムに依存しない形式で表現するための標準を導入することでした。 PDF ファイル形式には、テキスト、画像、ハイパーリンク、フォーム フィールド、リッチ メディア、デジタル署名、添付ファイル、メタデータ、地理空間機能、3D オブジェクトなどの情報をソース ドキュメントの一部として含めることができる完全な機能があります。
ほとんどの場合、新しい PDF を最初から作成するのではなく、既存のドキュメントを PDF に変換します。しかし、それは PDF ファイルを作成または操作するためのソフトウェアがないという意味ではありません。
(PDF ファイル形式について共有する必要がある場合は、PDF ファイル形式ニュース セクションに調査結果を投稿できます。)
PDF ファイル形式 - 簡単な歴史
タイムラインの観点から PDF ファイルの形成に関するタイムラインを簡単に説明すると、次のようになります。
1993 年 - Adobe Systems が PDF 仕様を無料で利用できるようにしました
2008 - PDF は 2008 年 7 月 1 日にオープン スタンダードとしてリリースされ、国際標準化機構によって ISO 32000-1:2008 として公開されました。
2008 年 - アドビは、PDF 準拠の実装を作成、使用、販売、および配布するために必要な、アドビが所有するすべての特許について、ISO 32000-1 形式のロイヤルティ フリーの権利に対する公開特許ライセンスを発行しました。
PDF の最初のバージョンは PDF 1.0 として指定され、後に PDF 1.7 まで改訂されました。 ISO 32000-1 となった PDF 1.7 には、Adobe XML Forms Architecture (XFA) や Acrobat の JavaScript 拡張など、標準化されていない独自の技術がいくつか含まれています。 ISO 32000-2:2017 として知られる PDF 2.0 が公開されたのは 2017 年 7 月 28 日で、標準化されていない技術は含まれていません。
PDFファイル形式の仕様
PDF ファイルは、PDF 仕様で定義された構文規則に従ってトークンにグループ化できる一連のバイトです。 1 つまたは複数のトークンを組み合わせて、PDF ドキュメントを構成する基本的なデータ値である高レベルの構文エンティティ (主にオブジェクト) を形成します。
PDFファイルのファイル構造
PDF ファイルの内容は、ファイル内で次の順序で配置されます。
|ヘッダー |ボディ |相互参照表 |予告編
PDF ファイルのヘッダー
PDF のバージョンに関係なく、PDF ファイルは、PDF の一意の識別子と、x が 1 ~ 7 の範囲の %PDF-1.x などの形式のバージョンを含むヘッダーで始まります。
ファイル本体
PDF ファイルの本文は、文書の内容を表す一連の間接オブジェクトで構成されています。前述のように、オブジェクトは、フォント、ページ、サンプル画像などのドキュメントのコンポーネントを表します。 PDF 1.5 以降では、ボディにオブジェクト ストリームを含めることもできます。各ストリームには一連の間接オブジェクトが含まれます。
相互参照表
相互参照テーブルには、特定のオブジェクトを見つけるためにファイル全体を読み取る必要がないように、ファイル内の間接オブジェクトへのランダム アクセスを許可する情報が含まれています。テーブルには、間接オブジェクトごとに 1 行のエントリが含まれ、ファイル本体内のそのオブジェクトのバイト オフセットが指定されます。 (PDF 1.5 以降では、相互参照情報の一部またはすべてが相互参照ストリームに含まれている場合があります。
ファイル トレーラー
PDF ファイルのトレーラにより、準拠するリーダーは、相互参照テーブルと特定の特殊オブジェクトをすばやく見つけることができます。適合リーダーは、PDF ファイルを最後から読む必要があります。ファイルの最後の行には、ファイルの終わりマーカー %%EOF のみが含まれます。前の 2 行には、キーワード startxref と、ファイルの先頭から最後の相互参照セクションの xref キーワードの先頭までのデコードされたストリーム内のバイト オフセットが、1 行に 1 つずつ順番に含まれます。
PDF オブジェクト
PDF ファイルには、次のタイプのいくつかの異なるタイプのオブジェクトが含まれています
- ブール値 - 条件付きの true または false を表す
- 数値 - 整数値と実数
- 文字列 - 括弧内に文字が含まれます
- 名前 - フォワード / 文字で開始します。例: /ASomewhatLongerName は ASomewhatLongerName になります。
- 配列 - PDF は 1 次元配列をサポートします。ネストされた要素として配列を使用することにより、高次元の配列を構築できます
- 辞書 - キーと値のペアとしてのオブジェクトのコレクション。エントリがゼロの場合もあります。
- ストリーム - 無制限の長さのバイトのシーケンスを表します
- Null オブジェクト - null 値を表します
% 記号で始まるコメントのような他のオブジェクトが存在する可能性があり、8 ビット文字を含む場合があります。
間接オブジェクト
PDF ファイル内のすべてのオブジェクトは、間接オブジェクトとしてラベル付けされる場合があります。間接オブジェクトには、他のオブジェクトが参照できる一意のオブジェクト識別子が与えられます。これらへの相互参照はインデックス テーブルに保持され、本体の後に続く xref キーワードでマークされ、ファイルの先頭からの各間接オブジェクトのバイト オフセットを示します。
線形および非線形 PDF レイアウト
PDF レイアウトは、ターゲット アプリケーションやその他の要因に応じて、線形と非線形に分類されます。
ノンリニア - ノンリニア PDF ファイルは、リニア PDF ファイルよりも少ないディスク容量を使用します。ドキュメントの PDF ページは、PDF ファイル全体に散らばった形で存在するため、ノンリニア ファイルはリニア ファイルに比べて処理が遅くなります。
Linear PDF - オンライン PDF ビューアを対象として、Linear PDF ファイルはディスクにリニアに書き込まれるように構築されています。これには、表示前にドキュメント全体を最初にロードするためのブラウザー プラグインは必要ありません。
オブジェクトの概要
前述のように、PDF ボディは上記のオブジェクトの集まりです。 PDF は主に PostScript に基づいており、if コマンドやループ コマンドなどのプログラミング言語の制御機能はありません。グラフィック コンテンツを生成するために Postscript コードによって発行されたコマンドは、ドキュメントによって参照されるファイル、グラフィック、またはフォントに加えて収集され、トークン化されます。これらのコンテンツはすべて 1 つのファイルに蓄積され、構成された PostScript 出力が生成されます。
#### 文章 ####
PDF のテキストは、フォントのグリフで実際に表示されるテキスト要素によって表されます。グリフはグラフィック形状であり、座標変換などのすべてのグラフィック操作の対象となります。ほとんどのページ記述ではテキストが重要であるため、PDF はグリフを便利かつ効率的に記述、選択、およびレンダリングするための高レベルの機能を提供します。
グラフィック
PDF コンテンツ ストリームで使用されるグラフィック オペレータは、ラスター出力デバイスで再現されるページの外観を記述します。この機能は、プリンターとディスプレイの両方のアプリケーションを対象としています。グラフィックス オペレータは、次の 6 つの主要なグループを形成します。
- グラフィックス ステート オペレータは、グラフィックス ステートと呼ばれるデータ構造を操作します。これは、他のグラフィックス オペレータが実行されるグローバル フレームワークです。グラフィックス状態には、PDF コンテンツ ストリーム内で使用されるユーザー空間座標を出力デバイス座標にマップする現在の変換マトリックス (CTM) が含まれます。また、現在の色、現在のクリッピング パス、およびペイント オペレータの暗黙のオペランドである他の多くのパラメータも含まれます。
- パス構築演算子は、形状、線の軌跡、およびさまざまな種類の領域を定義するパスを指定します。これらには、新しいパスの開始、線分と曲線の追加、およびパスを閉じるための演算子が含まれています。
- パスペインティング オペレータは、パスを色で塗りつぶしたり、それに沿ってストロークをペイントしたり、クリッピング境界として使用したりします。
- 他のペイント オペレータは、特定の自己記述型グラフィックス オブジェクトをペイントします。これらには、サンプリングされた画像、幾何学的に定義されたシェーディング、一連のグラフィック オペレーターを含むコンテンツ ストリーム全体が含まれます。
- テキスト演算子は、フォント (テキスト文字を表す書体の説明) から文字グリフを選択して表示します。 PDF はグリフを一般的なグラフィック形状として扱うため、多くのテキスト オペレーターをグラフィック状態または描画オペレーターとグループ化できます。ただし、グリフとフォントの記述を処理するためのデータ構造とメカニズムは、十分に特化されています。
- マークされたコンテンツ オペレータは、高レベルの論理情報をコンテンツ ストリーム内のオブジェクトに関連付けます。この情報は、レンダリングされたコンテンツの外観には影響しません。これは、ドキュメントの交換に PDF を使用するアプリケーションに役立ちます。