PDF 内部構造 構造の概念 簡単な説明のソースを表示
新しいページはコチラ
移動:
案内
,
検索
[[PDF 内部構造]]に戻る。 == '''概要''' == ファイルの構造の大まかな分類があるので、その分類をここで説明します。PDF内部構造の用語にもなれていかないといけません。この記事では最初の一歩に必要な内容を記述したいと思います。 PDFファイルのテキストが一つあるだけのシンプルな構造のファイルイメージは以下のようになります。 <syntaxhighlight2 lang="text" line=1> %PDF-1.7 %★(適当な129~255までの値を何バイトか) 1 0 obj << /Type /Pages /Count 1 /Kids [2 0 R] >> endobj 2 0 obj << /Type /Page /MediaBox [0 0 ★(xx xx 用紙サイズpixel)] /Resources 3 0 R /Parent 1 0 R /Contents [4 0 R] >> endobj 3 0 obj << /Font << /F0 << /Type /Font /BaseFont /Helvetica-Bold /Subtype /Type1 >> >> >> endobj 4 0 obj << /length ★(xx stream部(30行目~36行目終わり)のバイト長) >> stream 1. 0. 0. 1. ★(xx. xx 描画座標位置 左下原点で上と右方向に増えていくpixel座標値). cm BT /F0 12. Tf (PDF Strings! Parts) Tj ET endstream endobj 5 0 obj << /Type /Catalog /Pages 1 0 R >> endobj xref 0 6 0000000000 65535 f 0000000★(xxx 1 0 objの始まるバイト長) 00000 n 0000000★(xxx 2 0 objの始まるバイト長) 00000 n 0000000★(xxx 3 0 objの始まるバイト長) 00000 n 0000000★(xxx 4 0 objの始まるバイト長) 00000 n 0000000★(xxx 5 0 objの始まるバイト長) 00000 n trailer << /Size 6 /Root 5 0 R >> startxref ★(xx ファイルサイズ バイト長) %%EOF </syntaxhighlight2> はじめて見たときは、なんじゃコレ。って感じでした。皆さんの中にも初めての人がいたら同じような気持ちだったはずです。冷静にみてみると見えてくるものがあります。最初の2行あたりは、すべての拡張子のファイルにもあるファイルヘッダ部です。なんらかのファイル操作をしたことがある人なら知っているかもしれません。★マークがあるところは、任意の数値を指定したり、PDFtkに自動で算出してもらう数値だったりが入る箇所です。このファイルは実際はバイナリファイルですが、テキストで閲覧しても上記のように表示されるくらいテキストに近いものです。そして出回っているPDF生成ツールを使うとたいていは圧縮されて、なにがなんだかわからないファイルになっているのですが、上記のようにテキストでも理解できる非圧縮の見通しのいいPDFファイルも存在しています。ファイルを理解したい人にとってはこれでいいのですが、世の中そうもいかないらしい。いまファイルを理解しようとしている我々も含めて、単純に便利に使いたい人の方が多い。では上から見てます。 %PDF-1.7 ふむふむ。PDF-1.0 ~ PDF-1.7 までのバージョンがありますので、それぞれの仕様にあわせた値なので数字の部分は変わります。大した機能を使わない文書ならPDF-1.1とかを指定しても問題ないでしょう。むしろ大きなバージョンは複雑な仕様になっているので、きちんとすべての情報を書けていなくて動かなくなることがあるかもしれません。自分ごときが扱うときは、まだ1.1くらいしか使ったことないです。1.1でも普段使う機能は出来上がってます。ちなみに1.1の仕様に沿っていれば現状の1.7に対応しているリーダーでは開けるように、後方互換が完全に保証されています。逆に1.7の文書も1.1でひらける前方互換も概ね(おおむね)保証されているようです。ヘッダのあとにファイルがバイナリファイルであることを明示する工夫として、128以上のASCII文字列(ASCII文字コードは0~127の値とアルファベット文字を主に数値と文字を結び付けた対応関係があります。詳しくはASCII文字コードで調べて下さい)の外側の数値を記載しています。 そうすると3行目から現れる 1 0 obj のような表現が、2 0 obj、3 0 obj …のように飛び飛びで現れていて、それぞれはendobjというキーワードで対になっています。 1 0 obj<br /> …<br /> endobj<br /> これが<span style = "background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; ">オブジェクト</span>という単位です。まだオブジェクトの中身はわからなくていいです。まずは全体を見渡しましょう。数字は先頭から<span style = "background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; ">オブジェクト番号</span>、<span style = "background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; ">世代番号</span>と呼ばれています。オブジェクト番号はファイル内で唯一の番号(ユニークな番号)になっている必要があります。連番である必要がありそうです。最後のendobjのある42行目からはx x obj ~ endobjという対がおわり endobj xref<br /> 0 6<br /> …<br /> startxref<br /> のような構造があります。この部分は<span style = "background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; ">相互参照テーブル</span>と呼ばれています。オブジェクトは文書の中身を記述して構成していく要素ですが、相互参照テーブルは、そのオブジェクトがどこにあるかを記述したりします。実はファイルを開いたときは、たいていの閲覧ソフトは、この部分を探します。いまから見たいページがどこにあるかが記録されているからです。オブジェクトはフォルダのようなツリー構造になっていて、それぞれのオブジェクト内で、何がぶら下がっているか、どこにぶら下がっているかという情報をもっています。相互参照テーブルはその頂点であるルートのオブジェクトがどれかを保持したり、オブジェクトがいくつあるかという情報も保持しています。 そして、最後に55行目でファイルのサイズをバイト単位で指定した数値部分があって、%%EOFというファイル終端記号で終わっています。 PDFファイルとは、こういう構造になっています。ここまでの説明では、まだ理解しきれるものではありませんが、シンプルな表現のみの文書の全貌はみえてきたと思います。 [[PDF 内部構造]]に戻る。
PDF 内部構造 構造の概念 簡単な説明
に戻る。
個人用ツール
18.218.124.105
このIPアドレスのトーク
ログイン
名前空間
ページ
議論
変種
表示
閲覧
ソースを表示
履歴表示
操作
検索
案内
メインページ
コミュニティ・ポータル
最近の出来事
最近の更新
おまかせ表示
ヘルプ
ツールボックス
リンク元
関連ページの更新状況
特別ページ