PDF 内部構造 基本とファイル構造キーのソースを表示
新しいページはコチラ
移動:
案内
,
検索
== '''概要''' == PDF文書を構成するのには、キー、オペレータと固有の役割のあるキーワードがありました。この記事では、文書構造の基本的な部分で使われるキーとオペレータの細かい部分について触れます。またキーの値や文法についての基本についても触れます。どのように使うキーだったかオペレータだったかは[[PDF 内部構造 構造の概念 簡単な説明|構造の概念 簡単な説明]]の記事で使ったPDF文書を参考にして下さい。 === '''コメント''' === % 記号以降はコメントになります。C や Java の // に相当します。但し一行目の%PDF-1.1とかはヘッダ情報としての役割があります。 例 <Syntaxhighlight2 lang="text"> %PDF-1.7 %1行目もコメントですが、ヘッダの役割があります。 % 2行目以降はコメントを書くことができる。 1 0 obj % 1 0 obj はPDF構造文書ですが、%記号以降は途中からのコメントです。 </Syntaxhighlight2> === '''数値''' === 以下のように整数と簡単な小数が扱えます。浮動小数点のような表記は扱えません。 10 +2 -4 1.2 -.4 === '''論理値''' === 真や偽を表す論理代数の考え方でいうところの1(真)をtrue、0(偽)をfalseで表します。 === '''ヌル''' === なにも設定しないことを意味するヌル(空)はnullで表します。PDF文書では設定は別のところでやります。今はnullかな。みたいな簡単な使い方になります。 === '''文字列''' === 文字列は ( ) 丸カッコではさんで使います。C や Java ではダブルクォーテションを使って文字列リテラルを扱ったのと同じようなことです。文字列開始の ( の後に各種文法キーワードが登場しても、その機能は無視されて、文字列として扱います。文字列開始後 ) で閉じないうちは連続して ( や ) で対になる丸カッコが登場しても文字列の終わりとして扱われることは無く、いづれも文字列中の文字として扱われます。C などのエスケープシーケンスのように明示的に特殊な記号を用いて、特殊な文字列意味のあるコードを使うことができます。16進数文字列は < > 大なり、小なり記号で囲みます。前方から2桁づつが1文字で解釈されます。最後で一桁たりない場合は0を追加します。16進数の英文字部(a~f)は大文字で小文字でもよいです。 <table style="width: 100%; text-align: left; border-collapse: collapse; border-spacing: 0;"> <tr style=" background: #778ca3; border-right: solid 1px #778ca3; color: #ffffff;"> <th style="width: 200px;">シーケンス</th> <th>意味</th> </tr> <tr> <td>\n</td> <td>改行</td> </tr> <tr style=" background: #dddddd;"> <td>\r</td> <td>復帰</td> </tr> <tr> <td>\t</td> <td>水平タブ</td> </tr> <tr style=" background: #dddddd;"> <td>\b</td> <td>バックスペース</td> </tr> <tr> <td>\f</td> <td>改ページ</td> </tr> <tr style=" background: #dddddd;"> <td>\(</td> <td> ( 左側丸カッコ(パーレン)</td> </tr> <tr> <td>\)</td> <td> ) 右側丸カッコ(パーレン)</td> </tr> <tr style=" background: #dddddd;"> <td>\\</td> <td> \ エスケープ文字そのもの</td> </tr> <tr> <td>\ooo</td> <td>oooに示される8進数文字コード 0 ~ 511</td> </tr> </table> === '''名前''' === /で始まる名前は大文字と小文字が区別されます。/から名前終了文字までに空白文字は使えません。/そのものの単独1文字も名前として使えますが、たぶん使わない。 === '''配列''' === [ ] 角カッコ(ブラケット)の中に名前、参照、文字列、数値をおいて、配列を構成することができます。 === '''配列''' === [ ] 先の記事で触れたとおり、2次元配列のような概念がありません。配列の中に配列をいれることはできます。要素を順次、指定するというために使われます。例えば以下のようなモノも配列です。 例<br /> [0 (String) /flag 6 0 R [1 0 0 1]] === '''辞書''' === 辞書は << >> によって囲われる順序による意味がない塊です。先の記事でフォント書式をネストしたように入れ子で使うこともできます。 === '''ストリーム''' === ストリームにはテキストやコード化されたもの文書の内容に関する情報を記述します。テキストでもやったようにキー /Lengthと数値でストリームの長さを指定したり、どうやってデコードするべきかという情報を持つキー/Filterとその手法名のキー値を設定します。以下にストリームのキー値を示します。 <table style="width: 100%; text-align: left; border-collapse: collapse; border-spacing: 0;"> <tr style=" background: #778ca3; border-right: solid 1px #778ca3; color: #ffffff;"> <th style="width: 175px;">キー</th> <th style="width: 175px;">型</th> <th>指定する値の内容</th> </tr> <tr> <td>/Length</td> <td>整数</td> <td>ストリームのバイト長</td> </tr> <tr style=" background: #eeeeee;"> <td>/Filter</td> <td>キー値または配列</td> <td>デコードキー値を指定します。配列で複数のデコードキー値を示せます。</td> </tr> <tr style=" background: #dddddd;"> <td>/DecodeParms</td> <td>辞書または配列</td> <td>/Filterの指定したキー値に付随するオプションのパラメータを指定します。</td> </tr> <tr> <td>/F</td> <td>ファイル指定</td> <td>PDF-1.2機能ストリームデータのファイル名を指定</td> </tr> <tr style=" background: #eeeeee;"> <td>/FFilter</td> <td>キーまたは配列</td> <td>PDF-1.2機能、上記の/F指定時に適用デーコードキー値を指定するために使います</td> </tr> <tr style=" background: #dddddd;"> <td>/FDecodeParms</td> <td>辞書または配列</td> <td>PDF-1.2機能、上記の/F指定時のオプション指定に使います。</td> </tr> </table> フィルターとパラメータには以下のようなものがあります。具体的な使い方はここでは示しません。 ■/ASCIIHexDecode :パラメータ無し ■/ASCII85Decode :パラメータ無し ■/LZWDecode :パラメータ /Predictor (整数1,2,10,11,12,13,14,15), /Colors(整数), /BitsPerComponent(整数), /Columns(整数), /EarlyChange(整数) ■/FlateDecode :パラメータ LZWDecodeと同じです。 ■/RunLengthDecode :パラメータ無し ■/CCITTFaxDecode :パラメータ /K(整数), /EndOfLine(論理値), /EncodedByteAlign(論理値), /Columns(整数), /Rows(整数), /EndOfBlock(論理値), /Blackls1(論理値), /DamagedRowsBeforeError(整数) ■/DCTDecode :パラメータ /ColorTransform(整数) === '''相互参照テーブル xref''' === 相互参照テーブル xref(xrefはクロスリファレンスという意味だと思う)では1行目にn番目からm個あるオブジェクトを使うということを定義します。1 0 obj~5 0 objを使用するなら0~5の6個を使うので 例 <Syntaxhighlight2 lang="text"> xref 0 6 0000000000 65535 f 0000000013 00000 n 0000000113 00000 n 0000000143 00000 n 0000000163 00000 n 0000000213 00000 n … </Syntaxhighlight2> となります。1~5の5つのオブジェクトなのに0からはじまるというのは、最初の 0000000000 65535 f という行が必要なためです。これは末尾がfになっていてフリーオブジェクトを意味していて、使える番号を示しています。2行目以降は1オブジェクトづつどこにオブジェクトがあるかファイル先頭からのバイト値と更新番号とnという末尾文字がつけられた行が続きます。ただし、PDFが編集されobj番号がきえた場合は、その行のバイト値を0にして、次のオブジェクト番号が付与されます。上記の例の場合は、削除されたオブジェクトの行が 0000000000 00007 f となるでしょう。そして、つぎのオブジェクトが追加されると、追加されたオブジェクトのファイル先頭からのバイト値と更新番号とnという末尾文字をもったものが追加されるとともにxrefの次の行は 0 7 となるでしょう。このほかオブジェクト番号に空き番あるパターンでは以下のような記述もあるかもしれません。 例 <Syntaxhighlight2 lang="text"> xref 0 1 0000000000 65535 f 3 1 0000000013 00000 n 44 2 0000000113 00000 n 0000000143 00000 n 50 2 0000000163 00000 n 0000000213 00000 n … </Syntaxhighlight2> 更新処理の部分を作るのは難しいので、こういうところまで支援するようなアプリをつくる場合はもっと深い理解が必要なので、仕様書を読み込まないとだめかもです。仕様書には更新処理に関することも言及されています。読むしかないですね。 === '''トレーラ''' === trailerは追跡するモノという意味があります。ここで、文書全体のことにかかわる情報を設定したりします。キー /Size と /Root は必須の重要なキーワードです。trailer部で設定できるキーは以下のとおりです。 <table style="width: 100%; text-align: left; border-collapse: collapse; border-spacing: 0;"> <tr style=" background: #778ca3; border-right: solid 1px #778ca3; color: #ffffff;"> <th style="width: 175px;">キー</th> <th style="width: 175px;">型</th> <th>指定する値の内容</th> </tr> <tr> <td>/Size</td> <td>整数</td> <td>全オブジェクト数より1大きい値。プラス1は使えるオブジェクト番号を示したフリーエントリの1件分</td> </tr> <tr style=" background: #eeeeee;"> <td>/Root</td> <td>辞書 参照値</td> <td>カタログオブジェクトへの参照</td> </tr> <tr> <td>/Prev</td> <td>整数</td> <td></td> </tr> <tr style=" background: #eeeeee;"> <td>/Encrypt</td> <td>辞書</td> <td></td> </tr> <tr> <td>/Info</td> <td>辞書</td> <td></td> </tr> <tr style=" background: #eeeeee;"> <td>/ID</td> <td>配列</td> <td></td> </tr> </table>
PDF 内部構造 基本とファイル構造キー
に戻る。
個人用ツール
18.117.93.231
このIPアドレスのトーク
ログイン
名前空間
ページ
議論
変種
表示
閲覧
ソースを表示
履歴表示
操作
検索
案内
メインページ
コミュニティ・ポータル
最近の出来事
最近の更新
おまかせ表示
ヘルプ
ツールボックス
リンク元
関連ページの更新状況
特別ページ