PDF 内部構造 基本とファイル構造キー 新しいページはコチラ
提供: yonewiki
(→/FunctionType 1 : サンプリング関数) |
|||
1行: | 1行: | ||
− | [[PDF 内部構造]]に戻る。 | + | [[PDF 内部構造#説明|PDF 内部構造]]に戻る。 |
== '''概要''' == | == '''概要''' == | ||
PDF文書を構成するのには、キー、オペレータと固有の役割のあるキーワードがありました。この記事では、文書構造の基本的な部分で使われるキーとオペレータの細かい部分について触れます。またキーの値や文法についての基本についても触れます。どのように使うキーだったかオペレータだったかは[[PDF 内部構造 構造の概念 簡単な説明|構造の概念 簡単な説明]]の記事で使ったPDF文書を参考にして下さい。 | PDF文書を構成するのには、キー、オペレータと固有の役割のあるキーワードがありました。この記事では、文書構造の基本的な部分で使われるキーとオペレータの細かい部分について触れます。またキーの値や文法についての基本についても触れます。どのように使うキーだったかオペレータだったかは[[PDF 内部構造 構造の概念 簡単な説明|構造の概念 簡単な説明]]の記事で使ったPDF文書を参考にして下さい。 | ||
+ | |||
+ | |||
+ | ひとつひとつを理解するには深すぎてここでは、完全説明なぞできません。とっかかりとして読み始めると勉強になるかもしれないし、意味不明過ぎて、単に眠くなるだけかもしれない。キヲツケラレタシ。 | ||
102行: | 105行: | ||
/で始まる名前は大文字と小文字が区別されます。/から名前終了文字までに空白文字は使えません。/そのものの単独1文字も名前として使えますが、たぶん使わない。 | /で始まる名前は大文字と小文字が区別されます。/から名前終了文字までに空白文字は使えません。/そのものの単独1文字も名前として使えますが、たぶん使わない。 | ||
+ | |||
+ | 名前と対にして値を設定することになりますが、このときスペース文字を挟んで対にします。名前と値の間で改行してもよいので、値が辞書の時に改行をいれることが多いのですが、改行の間にも空白をいれる必要があります。 | ||
+ | |||
+ | <Syntaxhighlight2 lang="text"> | ||
+ | 例 | ||
+ | /Names %←この行の末尾に半角スペースが必要。 | ||
+ | << | ||
+ | /SubName 1 | ||
+ | /SpName 2 | ||
+ | >> | ||
+ | </Syntaxhighlight2> | ||
+ | |||
+ | |||
+ | 名前とその値である辞書の間にスペースが必要なのを忘れると、どこでPDFソースの記述が失敗しているのかがわかりづらくなります。忘れないようにしましょう。 | ||
910行: | 927行: | ||
上記のキーでは、関数のタイプを選択して、関数の変域(数学ではよくxになる値)と値域(数学ではよくyになる値)の最小値と最大値を設定する感じです。値が最小値より下回ったら、最小値に置換し、最大値を上回ったら最大値に置換します。関数のタイプによって、続けて指定できるキーが変わります。以下に /FunctionType の値ごとのキー値について記述します。 | 上記のキーでは、関数のタイプを選択して、関数の変域(数学ではよくxになる値)と値域(数学ではよくyになる値)の最小値と最大値を設定する感じです。値が最小値より下回ったら、最小値に置換し、最大値を上回ったら最大値に置換します。関数のタイプによって、続けて指定できるキーが変わります。以下に /FunctionType の値ごとのキー値について記述します。 | ||
− | ==== '''/FunctionType | + | ==== '''/FunctionType 0 : サンプリング関数''' ==== |
<table style="width: 100%; text-align: left; border-collapse: collapse; border-spacing: 0;"> | <table style="width: 100%; text-align: left; border-collapse: collapse; border-spacing: 0;"> | ||
− | <tr style=" background: # | + | <tr style=" background: #aabfd6; border-right: solid 1px #aabfd6; color: #ffffff;"> |
<th style="width: 175px;">キー</th> | <th style="width: 175px;">キー</th> | ||
<th style="width: 175px;">型</th> | <th style="width: 175px;">型</th> | ||
947行: | 964行: | ||
上記と必要なストリームのキーも使います。 | 上記と必要なストリームのキーも使います。 | ||
+ | |||
+ | |||
+ | ==== '''/FunctionType 2 : 指数補完関数''' ==== | ||
+ | <table style="width: 100%; text-align: left; border-collapse: collapse; border-spacing: 0;"> | ||
+ | <tr style=" background: #aabfd6; border-right: solid 1px #aabfd6; color: #ffffff;"> | ||
+ | <th style="width: 175px;">キー</th> | ||
+ | <th style="width: 175px;">型</th> | ||
+ | <th>指定する値の内容</th> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>/C0</td> | ||
+ | <td>配列</td> | ||
+ | <td>値域 0 に対する値を定義する。</td> | ||
+ | </tr> | ||
+ | <tr style=" background: #eeeeee;"> | ||
+ | <td>/C1</td> | ||
+ | <td>配列</td> | ||
+ | <td>値域 1 に対する値を定義する。</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>/N ★</td> | ||
+ | <td>整数</td> | ||
+ | <td>補完指数</td> | ||
+ | </tr> | ||
+ | </table> | ||
+ | |||
+ | |||
+ | |||
+ | ==== '''/FunctionType 3 : 縫合関数''' ==== | ||
+ | 複数の1入力関数を結合して利用するための関数 | ||
+ | <table style="width: 100%; text-align: left; border-collapse: collapse; border-spacing: 0;"> | ||
+ | <tr style=" background: #aabfd6; border-right: solid 1px #aabfd6; color: #ffffff;"> | ||
+ | <th style="width: 175px;">キー</th> | ||
+ | <th style="width: 175px;">型</th> | ||
+ | <th>指定する値の内容</th> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>/Functions ★</td> | ||
+ | <td>配列</td> | ||
+ | <td>1入力のm[個]の関数</td> | ||
+ | </tr> | ||
+ | <tr style=" background: #eeeeee;"> | ||
+ | <td>/Bounds ★</td> | ||
+ | <td>配列</td> | ||
+ | <td>関数が適用される区間を定義する。</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>/Encode ★</td> | ||
+ | <td>配列</td> | ||
+ | <td>2 × m[個]の関数のDomainとBoundsで定義される変数名の配列</td> | ||
+ | </tr> | ||
+ | </table> | ||
+ | |||
+ | |||
+ | |||
+ | ==== '''/FunctionType 4 : PostScript関数''' ==== | ||
+ | ストリームを使って記述する関数で、追加のキーはありませんが、オペランドとオペレータを使って表現します。PostScriptという名前がついていますが、このストリームにPostScriptを記述できるわけではないです。PostScriptにもあるような計算ができる関数機能だと思えばよいと思います。その関数もPostScriptの仕様に従うのではなくPDFの仕様に従うことになっています。 | ||
+ | |||
+ | |||
+ | <table style="width: 100%; text-align: left; border-collapse: collapse; border-spacing: 0;"> | ||
+ | <tr style=" background: #aabfd6; border-right: solid 1px #aabfd6; color: #ffffff;"> | ||
+ | <th style="width: 175px;">オペレータの種類</th> | ||
+ | <th colspan="5">オペレータ</th> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>算術オペレータ</td> | ||
+ | <td style="width: 50px;">abs</td> | ||
+ | <td style="width: 50px;">cvi</td> | ||
+ | <td style="width: 50px;">floor</td> | ||
+ | <td style="width: 50px;">mod</td> | ||
+ | <td style="width: 50px;">sin</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td></td> | ||
+ | <td>add</td> | ||
+ | <td>cvr</td> | ||
+ | <td>idiv</td> | ||
+ | <td>mul</td> | ||
+ | <td>sqrt</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td></td> | ||
+ | <td>atan</td> | ||
+ | <td>div</td> | ||
+ | <td>ln</td> | ||
+ | <td>neg</td> | ||
+ | <td>sub</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td></td> | ||
+ | <td>ceiling</td> | ||
+ | <td>exp</td> | ||
+ | <td>log</td> | ||
+ | <td>round</td> | ||
+ | <td>truncate</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td></td> | ||
+ | <td>cos</td> | ||
+ | <td></td> | ||
+ | <td></td> | ||
+ | <td></td> | ||
+ | <td></td> | ||
+ | </tr> | ||
+ | <tr style=" background: #eeeeee;"> | ||
+ | <td>比較 論理 ビット</td> | ||
+ | <td>and</td> | ||
+ | <td>false</td> | ||
+ | <td>le</td> | ||
+ | <td>not</td> | ||
+ | <td>true</td> | ||
+ | </tr> | ||
+ | <tr style=" background: #eeeeee;"> | ||
+ | <td></td> | ||
+ | <td>bitshift</td> | ||
+ | <td>ge</td> | ||
+ | <td>lt</td> | ||
+ | <td>or</td> | ||
+ | <td>xor</td> | ||
+ | </tr> | ||
+ | <tr style=" background: #eeeeee;"> | ||
+ | <td></td> | ||
+ | <td>eq</td> | ||
+ | <td>gt</td> | ||
+ | <td>ne</td> | ||
+ | <td></td> | ||
+ | <td></td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>条件オペレータ</td> | ||
+ | <td>if</td> | ||
+ | <td>iflese</td> | ||
+ | <td></td> | ||
+ | <td></td> | ||
+ | <td></td> | ||
+ | </tr> | ||
+ | <tr style=" background: #eeeeee;"> | ||
+ | <td>スタックオペレータ</td> | ||
+ | <td>copy</td> | ||
+ | <td>exch</td> | ||
+ | <td>pop</td> | ||
+ | <td></td> | ||
+ | <td></td> | ||
+ | </tr> | ||
+ | <tr style=" background: #eeeeee;"> | ||
+ | <td></td> | ||
+ | <td>dup</td> | ||
+ | <td>index</td> | ||
+ | <td>roll</td> | ||
+ | <td></td> | ||
+ | <td></td> | ||
+ | </tr> | ||
+ | </table> | ||
+ | |||
+ | |||
+ | |||
+ | 例 | ||
+ | <Syntaxhighlight2 lang="text"> | ||
+ | steam | ||
+ | { | ||
+ | 2 mul | ||
+ | 2 div | ||
+ | } | ||
+ | endstream | ||
+ | </Syntaxhighlight2> | ||
+ | |||
+ | |||
+ | |||
+ | 上記のように逆ポーランド記法のように書かれていくところが特徴です。関数の変域へ与えられた値をスタックに入れ、スタックに対して、2を掛けて、その結果として入ったスタック値へ、2で割っているという例です。 | ||
+ | |||
+ | |||
+ | |||
+ | === '''ファイル指定''' === | ||
+ | 絶対パスや相対パスのような仕組みを使って外部ファイルを参照することがあります。ファイルの指定は以下のように / によって区切られた表現を使うことになります。以下に代表的なOSにおける表記と、PDFで使われる表記を示しました。 | ||
+ | |||
+ | |||
+ | <b>■Windows</b><br /> | ||
+ | OS C:\User\xxx\Documents\Creative\PDF_Principle\workspace\Work.pdf<br /> | ||
+ | PDF /c/User/xxx/Documents/Creative/PDF_Principle/workspace/Work.pdf<br /> | ||
+ | <b>■Unix</b><br /> | ||
+ | OS /usr/xxx/Documents/Creative/PDF_Principle/workspace/Work.pdf<br /> | ||
+ | PDF /usr/xxx/Documents/Creative/PDF_Principle/workspace/Work.pdf<br /> | ||
+ | <b>■MacOS</b><br /> | ||
+ | OS MacHD:xxx/Documents/Creative/PDF_Principle/workspace/Work.pdf<br /> | ||
+ | PDF /MacHD/xxx/Documents/Creative/PDF_Principle/workspace/Work.pdf<br /> | ||
+ | |||
+ | |||
+ | / は、\/ で表現しますが、このときの\もエスケープする必要があり \\/ としなければならないと記載があります。具体的には実験してから記事を追記したいです。日本語は < > で囲ったバイトコードで表記する必要があります。また末尾が 5C(ASCIIコードの \に対応 )になる場合は、次の1バイトコードがエスケープシーケンス文字であると認識してしまうため、末尾コードに 5C がある場合は、もう一つ 5C を挿入して 5C そのもののコードであることを明示しなければなりません。いわゆる 5C 問題です。基本的には 5C ではじまる文字コードはないので、文字コードに 5C がある場合に注意しなければならないと言えるでしょう。上の階層に移動するときは、コマンドラインでもよく使われる .. 2連続ピリオドを指定します。 | ||
=== '''ファイル指定辞書''' === | === '''ファイル指定辞書''' === | ||
+ | 前項のようなファイル指定を具体的に実施すする辞書です。用意されたキーでより詳細に外部ファイル参照を行います。以下のようなキーを使います。 | ||
+ | |||
+ | |||
+ | |||
+ | <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>/Type </td> | ||
+ | <td>名前</td> | ||
+ | <td>定義する必要がある場合 /Filespec である必要があります。</td> | ||
+ | </tr> | ||
+ | <tr style=" background: #eeeeee;"> | ||
+ | <td>/FS</td> | ||
+ | <td>名前</td> | ||
+ | <td>ファイルシステムの名前を定義します。/DOSや/Macや/Unixと関連がありません。</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>/F</td> | ||
+ | <td>文字列</td> | ||
+ | <td>前の項目で説明したファイル指定の文字列</td> | ||
+ | </tr> | ||
+ | <tr style=" background: #eeeeee;"> | ||
+ | <td>/Mac</td> | ||
+ | <td>文字列</td> | ||
+ | <td>MacでPDFが動作している場合における外部ファイル指定の文字列</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>/DOS</td> | ||
+ | <td>文字列</td> | ||
+ | <td>DOS(Windows)でPDFが動作している場合における外部ファイル指定の文字列</td> | ||
+ | </tr> | ||
+ | <tr style=" background: #eeeeee;"> | ||
+ | <td>/Unix</td> | ||
+ | <td>文字列</td> | ||
+ | <td>UNIXでPDFが動作している場合における外部ファイル指定の文字列</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>/ID</td> | ||
+ | <td>配列</td> | ||
+ | <td>2つのファイル識別子</td> | ||
+ | </tr> | ||
+ | <tr style=" background: #eeeeee;"> | ||
+ | <td>/V</td> | ||
+ | <td>文字列</td> | ||
+ | <td>UNIXでPDFが動作している場合における外部ファイル指定の文字列</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>/EF</td> | ||
+ | <td>辞書</td> | ||
+ | <td>/F, /Mac, /DOS, /Unixのサブセットを含む辞書</td> | ||
+ | </tr> | ||
+ | <tr style=" background: #eeeeee;"> | ||
+ | <td>/RF</td> | ||
+ | <td>辞書</td> | ||
+ | <td>/F, /Mac, /DOS, /Unixのサブセットを含む辞書と同様の辞書</td> | ||
+ | </tr> | ||
+ | </table> | ||
+ | |||
=== '''埋め込みファイルストリーム''' === | === '''埋め込みファイルストリーム''' === | ||
+ | 前の項目までに紹介した外部ファイルのようなものをPDF自体に埋め込むための仕組みです。ファイルの依存関係が解消されるので、PDFファイルの中身が正しく表示されることを高めるものです。ただし、PDFファイル自体の容量が大きくなるデメリットはあります。繰り返し参照されないファイルであれば、埋め込んだ方が良いかもしない。埋め込みファイルストリームには以下のようなキーを使います。 | ||
− | === ''' | + | <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>/Type </td> | ||
+ | <td>名前</td> | ||
+ | <td>定義する場合 /EmbeddedFile である必要があります。</td> | ||
+ | </tr> | ||
+ | <tr style=" background: #eeeeee;"> | ||
+ | <td>/SubType</td> | ||
+ | <td>名前</td> | ||
+ | <td>MIMEメディアタイプの名前を定義します。</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>/Params</td> | ||
+ | <td>文字列</td> | ||
+ | <td>埋め込みファイルパラメータ辞書を指定します。</td> | ||
+ | </tr> | ||
+ | </table> | ||
+ | |||
+ | |||
+ | |||
+ | ==== '''埋め込みパラメータ辞書''' ==== | ||
+ | 埋め込みファイルストリームの /Params キーに指定する辞書には以下のようなキーを指定します。 | ||
+ | |||
+ | |||
+ | |||
+ | <table style="width: 100%; text-align: left; border-collapse: collapse; border-spacing: 0;"> | ||
+ | <tr style=" background: #aabfd6; border-right: solid 1px #aabfd6; color: #ffffff;"> | ||
+ | <th style="width: 175px;">キー</th> | ||
+ | <th style="width: 175px;">型</th> | ||
+ | <th>指定する値の内容</th> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>/Size </td> | ||
+ | <td>整数</td> | ||
+ | <td>埋め込みファイルのバイト長</td> | ||
+ | </tr> | ||
+ | <tr style=" background: #eeeeee;"> | ||
+ | <td>/CreationDate</td> | ||
+ | <td>日付</td> | ||
+ | <td>埋め込みファイルの作成日時</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>/ModDate</td> | ||
+ | <td>日付</td> | ||
+ | <td>埋め込みファイルの更新日時</td> | ||
+ | </tr> | ||
+ | <tr style=" background: #eeeeee;"> | ||
+ | <td>/Mac</td> | ||
+ | <td>辞書</td> | ||
+ | <td>埋め込みファイルに関するMacOS固有向けの情報</td> | ||
+ | </tr> | ||
+ | <tr style=" background: #eeeeee;"> | ||
+ | <td>/CheckSum</td> | ||
+ | <td>文字列</td> | ||
+ | <td>ファイルを構成する全情報をMD5によって算出して生成される16バイトの文字列。</td> | ||
+ | </tr> | ||
+ | </table> | ||
+ | |||
+ | |||
+ | ===== '''埋め込みファイルMacOS向け辞書''' ===== | ||
+ | 埋め込みファイルストリームの /Params キーに指定する辞書には以下のようなキーを指定します。 | ||
+ | |||
+ | |||
+ | |||
+ | <table style="width: 100%; text-align: left; border-collapse: collapse; border-spacing: 0;"> | ||
+ | <tr style=" background: #aabfd6; border-right: solid 1px #aabfd6; color: #ffffff;"> | ||
+ | <th style="width: 175px;">キー</th> | ||
+ | <th style="width: 175px;">型</th> | ||
+ | <th>指定する値の内容</th> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>/SubType </td> | ||
+ | <td>文字列</td> | ||
+ | <td>埋め込みファイルタイプ</td> | ||
+ | </tr> | ||
+ | <tr style=" background: #eeeeee;"> | ||
+ | <td>/Creater</td> | ||
+ | <td>文字列</td> | ||
+ | <td>埋め込みファイルの作成者名</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <tr> | ||
+ | <td>/ResFork </td> | ||
+ | <td>ストリーム</td> | ||
+ | <td>埋め込みファイルのリソースフォークバイナリ</td> | ||
+ | </tr> | ||
+ | </table> | ||
+ | |||
+ | |||
+ | |||
+ | ==== '''URL''' ==== | ||
+ | ファイル指定にURLが使えます。/FS に 値 /URL と /F キーを使って以下のように記述します。 | ||
+ | |||
+ | |||
+ | 例 | ||
+ | <Syntaxhighlight2 lang="text"> | ||
+ | << | ||
+ | /FS URL | ||
+ | /F (http://www.yo-net.jp/pdf/embedded.jpg) | ||
+ | >> | ||
+ | </Syntaxhighlight2> | ||
+ | |||
+ | こんな感じ。 | ||
+ | |||
+ | |||
+ | 以上が、PDFの基本的な構造で使うものでした。具体的な使用例はおいおいでしょうか。 | ||
+ | |||
− | [[PDF 内部構造]]に戻る。 | + | [[PDF 内部構造#説明|PDF 内部構造]]に戻る。 |