PDF 内部構造 構造の概念 簡単な説明 新しいページはコチラ
提供: yonewiki
(→概要) |
(→概要) |
||
77行: | 77行: | ||
− | + | ファイルの中身について、はじめて見たときは、なんじゃコレ。って感じでした。皆さんの中にも初めての人がいたら同じような気持ちだったはずです。冷静にみてみると見えてくるものがあります。最初の2行あたりは、すべての拡張子のファイルにもあるファイルヘッダ部です。なんらかのファイル操作をしたことがある人なら知っているかもしれません。★マークがあるところは、任意の数値を指定したり、PDFtkに自動で算出してもらう数値だったりが入る箇所です。このファイルは実際はバイナリファイルですが、テキストで閲覧しても上記のように表示されるくらいテキストに近いものです。そして出回っているPDF生成ツールを使うとたいていは圧縮されて、なにがなんだかわからないファイルになっているのですが、上記のようにテキストでも理解できる非圧縮の見通しのいいPDFファイルも存在しています。ファイルを理解したい人にとってはこれでいいのですが、世の中そうもいかないらしい。いまファイルを理解しようとしている我々も含めて、単純に便利に使いたい人の方が多い。では上から見てみます。 | |
112行: | 112行: | ||
− | + | そして、最後に55行目で相互参照テーブルの開始位置をバイト単位で指定した数値部分があって、ここでは、0 を指定しています。0と記述しておけば、PDFtkが相互参照テーブルの開始位置のバイト値を補完してくれます。最終行は%%EOFというファイル終端記号で終わっています。 | |
122行: | 122行: | ||
■5 0 obj | ■5 0 obj | ||
− | :: ルートオブジェクト( | + | :: ルートオブジェクト(<span style = "background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; ">カタログ</span>:目録 全体の目次といってもよいかも)です。相互参照テーブルのトレーラ部で/Root 5 0 R のように指定されています。5 0 R は/Rootという名前のモノは5 0 objを参照(Referrence)しますという意味の 5 0 Rです。x x R という形式はよく登場します。/Root という表記もよく登場します。 / のあとに文字列が記述されたようなパターンを<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>と呼んでいて、ユーザが自由につけるものは名前と呼んでいます。プログラムで言うところの変数みたいなものです。 |
129行: | 129行: | ||
■1 0 obj | ■1 0 obj | ||
− | :: | + | :: <span style = "background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; ">ページ</span>です。5 0 obj のカタログにぶら下がっているページ要素という意味です。 |
140行: | 140行: | ||
:: 5 0 obj にも/Type は /Pageだと指定しています。但し、要素には1 0 obj には記述しなかったような名前について定義されています。/MediaBox は 用紙サイズをピクセル単位で指定します。A4用紙サイズの縦なら[0 0 1033 1462]というように指定します。[ ] 角カッコ(ブラケット)は配列の中身を空白区切りで記述するような仕組みになっています。このような記述方法を配列と呼んでいます。プログラムの配列は角カッコを使って要素数を指定しますが、そのような要素数の指定をするといったことの意味はありません。プログラムでいうと { } 波カッコ(ブレース)のような配列初期化指定に似ているかもしれません。 | :: 5 0 obj にも/Type は /Pageだと指定しています。但し、要素には1 0 obj には記述しなかったような名前について定義されています。/MediaBox は 用紙サイズをピクセル単位で指定します。A4用紙サイズの縦なら[0 0 1033 1462]というように指定します。[ ] 角カッコ(ブラケット)は配列の中身を空白区切りで記述するような仕組みになっています。このような記述方法を配列と呼んでいます。プログラムの配列は角カッコを使って要素数を指定しますが、そのような要素数の指定をするといったことの意味はありません。プログラムでいうと { } 波カッコ(ブレース)のような配列初期化指定に似ているかもしれません。 | ||
− | :: ページ要素の親は 1 0 obj という意味で/Parent 1 0 R | + | :: ページ要素の親は 1 0 obj という意味で/Parent 1 0 R が指定されています。 |
153行: | 153行: | ||
− | :: ややこしい感じで設定されていますが、/FBaseというユーザ定義のフォント書式が定義されている上でフォントの設定を実際に3つ指定しているという形式です。/BaseFontで実際にフォント名をしていして、使うフォントを定義しています。英字フォントはフォント名にハイフン「-」で連結させるようにしてBold(太字)やItalic(斜体)を使うという指定ができるものが多いです。フォント名には英字フォント名というのがあるので、その値を設定します。/Subtypeもややこしいですが、フォントにはいくつかの形式があります。標準Type1(ASN Developer ProgramサイトからもダウンロードできるAdobeFontMetricsFileFormatファイル) | + | :: ややこしい感じで設定されていますが、/FBaseというユーザ定義のフォント書式が定義されている上でフォントの設定を実際に3つ指定しているという形式です。/BaseFontで実際にフォント名をしていして、使うフォントを定義しています。英字フォントはフォント名にハイフン「-」で連結させるようにしてBold(太字)やItalic(斜体)を使うという指定ができるものが多いです。フォント名には英字フォント名というのがあるので、その値を設定します。/Subtypeもややこしいですが、フォントにはいくつかの形式があります。標準Type1(ASN Developer ProgramサイトからもダウンロードできるAdobeFontMetricsFileFormatファイル)は以下のとおりらしいです。 |
Courier, Courier-Bold, Courier-Oblique, Courier-BoldOblique<br /> | Courier, Courier-Bold, Courier-Oblique, Courier-BoldOblique<br /> | ||
161行: | 161行: | ||
− | :: 他にも/SubTypeには、Type0, MMType1, Type3, TrueType, CIDFontType0, | + | :: 他にも/SubTypeには、Type0, MMType1, Type3, TrueType, CIDFontType0, CIDFontType2というのがあります。そのあたりはまた別途です。日本語フォントなんかを使う我々はもう少し、深く勉強しないと、PDF文書を扱えるレベルには到達できないようになっています。 |