PDF 内部構造 基本とファイル構造キー 新しいページはコチラ

提供: yonewiki
移動: 案内, 検索
(文書カタログ)
 
1行: 1行:
[[PDF 内部構造]]に戻る。
+
[[PDF 内部構造#説明|PDF 内部構造]]に戻る。
 
== '''概要''' ==
 
== '''概要''' ==
 
 PDF文書を構成するのには、キー、オペレータと固有の役割のあるキーワードがありました。この記事では、文書構造の基本的な部分で使われるキーとオペレータの細かい部分について触れます。またキーの値や文法についての基本についても触れます。どのように使うキーだったかオペレータだったかは[[PDF 内部構造 構造の概念 簡単な説明|構造の概念 簡単な説明]]の記事で使ったPDF文書を参考にして下さい。
 
 PDF文書を構成するのには、キー、オペレータと固有の役割のあるキーワードがありました。この記事では、文書構造の基本的な部分で使われるキーとオペレータの細かい部分について触れます。またキーの値や文法についての基本についても触れます。どのように使うキーだったかオペレータだったかは[[PDF 内部構造 構造の概念 簡単な説明|構造の概念 簡単な説明]]の記事で使ったPDF文書を参考にして下さい。
 +
 +
 +
 ひとつひとつを理解するには深すぎてここでは、完全説明なぞできません。とっかかりとして読み始めると勉強になるかもしれないし、意味不明過ぎて、単に眠くなるだけかもしれない。キヲツケラレタシ。
 +
 +
 
 +
 +
=== '''用語''' ===
 +
 ノード(Node):〇→〇 のようなイメージです。?。Windowsエクスプローラのフォルダが階層を作るように展開した状態をツリーといいます。日本語では木構造といいます。このときフォルダはツリーを構築する実体(オブジェクト:Object)ですが、木構造のオブジェクトはノードと呼んでいます。ツリーは末端までたどっていくと沢山のノードを持つことができます。そのような形態ですから、ツリーはノードをひとつにまとめ上げることができると言えます。そういった仕組みがPDFでは使われています。複数形だとNodes。深い!
 +
 +
 
 +
  
 
 
 
 
81行: 92行:
 
  </tr>
 
  </tr>
 
</table>
 
</table>
 +
 +
 
 +
 +
 例
 +
<Syntaxhighlight2 lang="text">
 +
(Strings Sample)
 +
</Syntaxhighlight2>
  
 
 
 
 
87行: 105行:
 
 /で始まる名前は大文字と小文字が区別されます。/から名前終了文字までに空白文字は使えません。/そのものの単独1文字も名前として使えますが、たぶん使わない。
 
 /で始まる名前は大文字と小文字が区別されます。/から名前終了文字までに空白文字は使えません。/そのものの単独1文字も名前として使えますが、たぶん使わない。
  
 +
 +
 名前と対にして値を設定することになりますが、このときスペース文字を挟んで対にします。名前と値の間で改行してもよいので、値が辞書の時に改行をいれることが多いのですが、改行の間にも空白をいれる必要があります。
 +
 +
<Syntaxhighlight2 lang="text">
 +
 +
/Names %←この行の末尾に半角スペースが必要。
 +
<<
 +
  /SubName 1
 +
  /SpName 2
 +
>>
 +
</Syntaxhighlight2>
 +
 +
 +
 名前とその値である辞書の間にスペースが必要なのを忘れると、どこでPDFソースの記述が失敗しているのかがわかりづらくなります。忘れないようにしましょう。
 
 
 
 
  
349行: 381行:
 
   </tr>
 
   </tr>
 
  <tr>
 
  <tr>
   <td>/Type</td>
+
   <td>/Type </td>
 
   <td>名前</td>
 
   <td>名前</td>
 
   <td>/Catalog と指定します。必須です。</td>
 
   <td>/Catalog と指定します。必須です。</td>
 
  </tr>
 
  </tr>
 
  <tr style=" background: #eeeeee;">
 
  <tr style=" background: #eeeeee;">
   <td>/Pages</td>
+
   <td>/Pages ★(間接[指])</td>
 
   <td>辞書</td>
 
   <td>辞書</td>
   <td></td>
+
   <td>文書ページである/Type /Pageのルートへの参照を指定する</td>
 
  </tr>
 
  </tr>
 
  <tr>
 
  <tr>
 
   <td>/Pagelabels</td>
 
   <td>/Pagelabels</td>
 
   <td>数値</td>
 
   <td>数値</td>
   <td></td>
+
   <td>(PDF1.3以降)</td>
 
  </tr>
 
  </tr>
 
  <tr style=" background: #eeeeee;">
 
  <tr style=" background: #eeeeee;">
 
   <td>/Names</td>
 
   <td>/Names</td>
 
   <td>辞書</td>
 
   <td>辞書</td>
   <td></td>
+
   <td>(PDF1.2以降)</td>
 
  </tr>
 
  </tr>
 
  <tr>
 
  <tr>
   <td>/Dests</td>
+
   <td>/Dests(間接[指])</td>
 
   <td>辞書</td>
 
   <td>辞書</td>
   <td></td>
+
   <td>(PDF1.1以降)</td>
 
  </tr>
 
  </tr>
 
  <tr style=" background: #eeeeee;">
 
  <tr style=" background: #eeeeee;">
 
   <td>/ViewerPreferences</td>
 
   <td>/ViewerPreferences</td>
 
   <td>辞書</td>
 
   <td>辞書</td>
   <td></td>
+
   <td>(PDF1.2以降)</td>
 
  </tr>
 
  </tr>
 
  <tr>
 
  <tr>
382行: 414行:
 
   <td>名前</td>
 
   <td>名前</td>
 
   <td></td>
 
   <td></td>
 +
</tr>
 +
<tr>
 +
  <td></td>
 +
  <td></td>
 +
  <td>/SinglePage 1ページ表示 ページの移動コマンドを使わないと次は表示しない。</td>
 +
</tr>
 +
<tr>
 +
  <td></td>
 +
  <td></td>
 +
  <td>/OneColumns ページを連続表示</td>
 +
</tr>
 +
<tr>
 +
  <td></td>
 +
  <td></td>
 +
  <td>/TwoColumnsLeft 1,3,5… 奇数ページを左に表示</td>
 +
</tr>
 +
<tr>
 +
  <td></td>
 +
  <td></td>
 +
  <td>/TwoColumnsRight 1,3,5… 奇数ページを右に表示</td>
 
  </tr>
 
  </tr>
 
  <tr style=" background: #eeeeee;">
 
  <tr style=" background: #eeeeee;">
387行: 439行:
 
   <td>名前</td>
 
   <td>名前</td>
 
   <td></td>
 
   <td></td>
 +
</tr>
 +
<tr style=" background: #eeeeee;">
 +
  <td></td>
 +
  <td></td>
 +
  <td>/UseNone (規定値) アウトラインとサムネイルを非表示</td>
 +
</tr>
 +
<tr style=" background: #eeeeee;">
 +
  <td></td>
 +
  <td></td>
 +
  <td>/UseThumbs サムネイル表示</td>
 +
</tr>
 +
<tr style=" background: #eeeeee;">
 +
  <td></td>
 +
  <td></td>
 +
  <td>/UseOutlines アウトライン表示</td>
 +
</tr>
 +
<tr style=" background: #eeeeee;">
 +
  <td></td>
 +
  <td></td>
 +
  <td>/FullScreens 文書内容をフルスクリーン表示</td>
 
  </tr>
 
  </tr>
 
  <tr>
 
  <tr>
   <td>/Outlines</td>
+
   <td>/Outlines(間接[指])</td>
 
   <td>辞書</td>
 
   <td>辞書</td>
 
   <td></td>
 
   <td></td>
 
  </tr>
 
  </tr>
 
  <tr style=" background: #eeeeee;">
 
  <tr style=" background: #eeeeee;">
   <td>/Threads</td>
+
   <td>/Threads(間接[指])</td>
 
   <td>配列</td>
 
   <td>配列</td>
   <td></td>
+
   <td>(PDF1.1以降)</td>
 
  </tr>
 
  </tr>
 
  <tr>
 
  <tr>
 
   <td>/OpenAction</td>
 
   <td>/OpenAction</td>
 
   <td>配列か辞書</td>
 
   <td>配列か辞書</td>
   <td></td>
+
   <td>(PDF1.1以降)</td>
 
  </tr>
 
  </tr>
 
  <tr style=" background: #eeeeee;">
 
  <tr style=" background: #eeeeee;">
411行: 483行:
 
   <td>/AcroForm</td>
 
   <td>/AcroForm</td>
 
   <td>辞書</td>
 
   <td>辞書</td>
   <td></td>
+
   <td>(PDF1.2以降)</td>
 
  </tr>
 
  </tr>
 
  <tr style=" background: #eeeeee;">
 
  <tr style=" background: #eeeeee;">
 
   <td>/StructTreeRoot</td>
 
   <td>/StructTreeRoot</td>
 
   <td>辞書</td>
 
   <td>辞書</td>
   <td></td>
+
   <td>(PDF1.3以降)</td>
 
  </tr> <tr>
 
  </tr> <tr>
 
   <td>/SpiderInfo</td>
 
   <td>/SpiderInfo</td>
 
   <td>辞書</td>
 
   <td>辞書</td>
   <td></td>
+
   <td>(PDF1.3以降)</td>
 
  </tr>
 
  </tr>
 
</table>
 
</table>
427行: 499行:
  
 
=== '''ページツリー''' ===
 
=== '''ページツリー''' ===
 +
 文書ページ情報を記載したオブジェクト。文書の内容ではなく、例えばページのサイズのようなページ固有の形式の情報を記述するものです。
 +
==== '''ページツリーノード''' ====
 +
 ページツリーには、ページ情報を記載しますが、ページツリーを記載したページが書いてある参照をまとめる情報を記載するものとして、ページツリーノードというものが使われるのも一般的です。ページツリーは、複数階層として組めるので、ページツリーノードの参照先がまたページツリーノードになっていて、何回かページツリーノードを参照した先にページ情報を記載しているものがあるという構造をもたせることが出来ます。
 +
<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>/Pages と指定します。必須です。</td>
 +
</tr>
 +
<tr style=" background: #eeeeee;">
 +
  <td>/Parent ★(間接[指])</td>
 +
  <td>辞書</td>
 +
  <td>複数階層を持つページツリーノードでどこから参照されたかという情報を記載する辞書です。</td>
 +
</tr>
 +
<tr>
 +
  <td>/Kids ★</td>
 +
  <td>配列</td>
 +
  <td>ページツリーノードあるいはページ情報への参照を配列で指定します。</td>
 +
</tr>
 +
<tr style=" background: #eeeeee;">
 +
  <td>/Count ★</td>
 +
  <td>整数</td>
 +
  <td>ぶら下がっているページツリーノード、ページ情報への参照の総数。その下にぶら下がっているものはカウントしない。直接ぶら下がっている数だけ</td>
 +
</tr>
 +
</table>
 +
 +
 +
 例
 +
<Syntaxhighlight2 lang="text">
 +
5 0 obj
 +
<<
 +
/Type /Pages
 +
/Parent 2 0 R
 +
/Kids [ 6 0 R 7 0 R 9 0 R ]
 +
/Count 3
 +
>>
 +
endobj
 +
</Syntaxhighlight2>
 +
 +
 +
 
 +
 +
==== '''ページオブジェクト''' ====
 +
 ページツリーノードの終端にぶら下がるオブジェクトで、ページ情報を保持するものです。
 +
<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>/Page と指定します。必須です。ページツリーノードは/Pagesです。末尾に s が付く使いないでオブジェクトの意味する/Typeが異なります。気を付けて。</td>
 +
</tr>
 +
<tr style=" background: #eeeeee;">
 +
  <td>/Parent ★(間接[指])</td>
 +
  <td>辞書</td>
 +
  <td>複数階層を持つページツリーノードでどこから参照されたかという情報を記載する辞書です。</td>
 +
</tr>
 +
<tr>
 +
  <td>/Resources ☆</td>
 +
  <td>辞書</td>
 +
  <td>指定しない場合は親ノード、階層を遡ったところにある一番近い階層の指定を採用します。どこかで指定してある必要はあります。こういう状態をここでは、必須(継承可)あるいは☆と表現します。</td>
 +
</tr>
 +
<tr style=" background: #eeeeee;">
 +
  <td>/MediaMix ☆</td>
 +
  <td>矩形</td>
 +
  <td>必須(継承可) ページのサイズをピクセルで指定します。</td>
 +
</tr>
 +
<tr>
 +
  <td>/CropBox ◇</td>
 +
  <td>矩形</td>
 +
  <td>指定しない場合は親ノード、階層を遡ったところにある一番近い階層の指定を採用します。どこかで指定してある必要はなく省略可能。こういう状態をここでは、省略可(継承可)あるいは◇と表現します。印刷・表示対象の領域。MediaBox値が規定値</td>
 +
</tr>
 +
<tr style=" background: #eeeeee;">
 +
  <td>/BleedBox </td>
 +
  <td>矩形</td>
 +
  <td>(PDF1.3以上)制作環境の出力において対象となる領域。CropBox値が規定値</td>
 +
</tr>
 +
<tr>
 +
  <td>/TrimBox</td>
 +
  <td>矩形</td>
 +
  <td>トリミング後寸法。CropBox値が規定値</td>
 +
</tr>
 +
<tr style=" background: #eeeeee;">
 +
  <td>/ArtBox </td>
 +
  <td>矩形</td>
 +
  <td>作者が意図する出力領域。CropBox値が規定値</td>
 +
</tr>
 +
<tr>
 +
  <td>/Contents</td>
 +
  <td>ストリームか配列</td>
 +
  <td>トリミング後寸法。CropBox値が規定値</td>
 +
</tr>
 +
<tr style=" background: #eeeeee;">
 +
  <td>/Rotate </td>
 +
  <td>整数</td>
 +
  <td>0, 90, 180, 270のいずれかを度数で表示。0 が規定値</td>
 +
</tr>
 +
<tr>
 +
  <td>/Thumb</td>
 +
  <td>ストリーム</td>
 +
  <td>サムネールイメージを指定</td>
 +
</tr>
 +
<tr style=" background: #eeeeee;">
 +
  <td>/B </td>
 +
  <td>配列</td>
 +
  <td>(PDF1.1以上)アーティクルビーズへの参照配列を設定</td>
 +
</tr>
 +
<tr>
 +
  <td>/Dur</td>
 +
  <td>数値</td>
 +
  <td>ページ表示時間を秒で指定。</td>
 +
</tr>
 +
<tr style=" background: #eeeeee;">
 +
  <td>/Trans </td>
 +
  <td>配列</td>
 +
  <td>(PDF1.1以上)アーティクルビーズへの参照配列を設定</td>
 +
</tr>
 +
<tr>
 +
  <td>/Dur</td>
 +
  <td>数値</td>
 +
  <td>(PDF1.1以上)ページ表示時間を秒で指定。</td>
 +
</tr>
 +
<tr style=" background: #eeeeee;">
 +
  <td>/Trans </td>
 +
  <td>辞書</td>
 +
  <td>(PDF1.1以上)次ページへの移行効果への参照を設定</td>
 +
</tr>
 +
<tr>
 +
  <td>/Annots</td>
 +
  <td>配列</td>
 +
  <td>注釈辞書配列</td>
 +
</tr>
 +
<tr style=" background: #eeeeee;">
 +
  <td>/AA </td>
 +
  <td>辞書</td>
 +
  <td>(PDF1.2以上)オープンクローズ時のアクションへの参照を設定</td>
 +
</tr>
 +
<tr>
 +
  <td>/PieceInfo</td>
 +
  <td>辞書</td>
 +
  <td>(PDF1.3以上)ページピース辞書</td>
 +
</tr>
 +
<tr style=" background: #eeeeee;">
 +
  <td>/LastModified </td>
 +
  <td>日付</td>
 +
  <td>(PDF1.3以上)ページが最後に変更された日付と時間</td>
 +
</tr>
 +
<tr>
 +
  <td>/StructParents</td>
 +
  <td>整数</td>
 +
  <td>(PDF1.3以上)構造ペアレントツリーにおけるページのエントリ整数キー</td>
 +
</tr>
 +
<tr style=" background: #eeeeee;">
 +
  <td>/ID </td>
 +
  <td>文字列</td>
 +
  <td>(PDF1.3以上)できれば間接参照で記述するページペアレントWebCaptureコンテンツセットのデジタル識別子</td>
 +
</tr>
 +
<tr>
 +
  <td>/PZ</td>
 +
  <td>数値</td>
 +
  <td>(PDF1.3以上)構造ペアレントツリーにおけるページのエントリ整数キー</td>
 +
</tr>
 +
<tr style=" background: #eeeeee;">
 +
  <td>/SeparationInfo </td>
 +
  <td>辞書</td>
 +
  <td>(PDF1.3以上)色分解辞書</td>
 +
</tr>
 +
</table>
 +
  
 
 
 
 
  
 
=== '''名前辞書''' ===
 
=== '''名前辞書''' ===
 +
 名前辞書は /xxx という形式の名前に対応する値は何かというものを複数設定しているような << >> で囲われた辞書のことです。これを使って様々な名前が準備されるため、各オブジェクトでの値の指定が楽になります。以下のようなキーも設定できます。
 +
<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>/Dests</td>
 +
  <td>名前</td>
 +
  <td>名前辞書の割り当てをする先</td>
 +
</tr>
 +
<tr style=" background: #eeeeee;">
 +
  <td>/AP </td>
 +
  <td>名前</td>
 +
  <td>注釈外観ストリームに割り当てする名前</td>
 +
</tr>
 +
<tr>
 +
  <td>/JavaScript</td>
 +
  <td>名前</td>
 +
  <td>JavaScriptの割り当てをする先</td>
 +
</tr>
 +
<tr style=" background: #eeeeee;">
 +
  <td>/Pages </td>
 +
  <td>名前</td>
 +
  <td>可視ページへの対話フォームの割り当てする名前</td>
 +
</tr>
 +
<tr>
 +
  <td>/Templates</td>
 +
  <td>名前</td>
 +
  <td>不可視ページへの対話フォームの割り当てをする名前</td>
 +
</tr>
 +
<tr style=" background: #eeeeee;">
 +
  <td>/IDS </td>
 +
  <td>名前</td>
 +
  <td>コンテンツIDをWeb Captureコンテンツセットに割り当てする名前</td>
 +
</tr>
 +
<tr>
 +
  <td>/URLS</td>
 +
  <td>名前</td>
 +
  <td>URLをWeb Captureコンテンツセットに割り当てする名前</td>
 +
</tr>
 +
</table>
  
 
 
 
 
  
 
=== '''コンテンツストリーム''' ===
 
=== '''コンテンツストリーム''' ===
 +
 コンテンツを記述する部分です。PDF1.0~1.7および2.0にわたって起こる互換性エラーを無視することを明示するオペレータがあります。
 +
 +
BX オペレータ。このオペレータが登場したところから EX オペレータが出るところまでが互換性エラーに対して柔軟に対応するべく、互換性エラーを無視してくれます。
  
 
 
 
 
  
 
=== '''リソース辞書''' ===
 
=== '''リソース辞書''' ===
 +
 フォントやグラフィックス設定なんかを指定する役割の辞書です。以下のようなキーでそれぞれのリソースを設定できます。
 +
 +
<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>/ExtGState</td>
 +
  <td>辞書</td>
 +
  <td>グラフィック状態を指定する辞書</td>
 +
</tr>
 +
<tr style=" background: #eeeeee;">
 +
  <td>/ColorSpace </td>
 +
  <td>辞書</td>
 +
  <td>カラースペース。カラー指定に関する設定を指定する辞書</td>
 +
</tr>
 +
<tr>
 +
  <td>/Pattern</td>
 +
  <td>辞書</td>
 +
  <td>パターン状態を指定する辞書</td>
 +
</tr>
 +
<tr style=" background: #eeeeee;">
 +
  <td>/Shading </td>
 +
  <td>辞書</td>
 +
  <td>面の表面状態であるシェーディング指定に関する設定を指定する辞書</td>
 +
</tr>
 +
<tr>
 +
  <td>/XObject</td>
 +
  <td>ストリーム</td>
 +
  <td>外部オブジェクトを割り当てする辞書。</td>
 +
</tr>
 +
<tr style=" background: #eeeeee;">
 +
  <td>/Font </td>
 +
  <td>辞書</td>
 +
  <td>フォント指定に関する設定を指定する辞書</td>
 +
</tr>
 +
<tr>
 +
  <td>/ProcSet</td>
 +
  <td>配列</td>
 +
  <td>定義済み手続きセットの名前を割り当てする配列。</td>
 +
</tr>
 +
<tr style=" background: #eeeeee;">
 +
  <td>/Properties </td>
 +
  <td>辞書</td>
 +
  <td>マーク付きコンテンツ用の特性リスト辞書の指定に関する設定を指定する辞書</td>
 +
</tr>
 +
</table>
  
 
 
 
 
  
 
=== '''矩形''' ===
 
=== '''矩形''' ===
 +
 矩形データは4つのデータを持つ配列として [左下x 左下y 右上x 右上y] の形式で表現します。
  
 
 
 
 
  
 
=== '''名前ツリー''' ===
 
=== '''名前ツリー''' ===
 +
 名前ツリーは以下のようなキーを用いて構成します。
 +
 +
<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>/Kids</td>
 +
  <td>配列</td>
 +
  <td>子への参照を配列で指定。。</td>
 +
</tr>
 +
<tr style=" background: #eeeeee;">
 +
  <td>/Names </td>
 +
  <td>配列</td>
 +
  <td>名前と参照の対を配列で指定</td>
 +
</tr>
 +
<tr>
 +
  <td>/Limits</td>
 +
  <td>配列</td>
 +
  <td>Namesの名前から名前までの値を使うことを明示する。</td>
 +
</tr>
 +
</table>
 +
 +
 +
 
 +
 +
<Syntaxhighlight2 lang="text">
 +
2 0 obj
 +
<<
 +
  /Limits [(Saturday) (Sunday)]
 +
  /Kids [
 +
    4 0 R
 +
    5 0 R
 +
  ]
 +
>>
 +
endobj
 +
 +
3 0 obj
 +
<<
 +
  /Limits [(Monday) (Friday)]
 +
  /Names [
 +
    (Monday) 6 0 R
 +
    (Tuesday) 7 0 R
 +
    (Wednesday) 8 0 R
 +
    (Thursday) 9 0 R
 +
    (Friday) 10 0 R
 +
  ]
 +
>>
 +
endobj
 +
</Syntaxhighlight2>
  
 
 
 
 
  
 
=== '''数値ツリー''' ===
 
=== '''数値ツリー''' ===
 +
 名前ツリーでは /Names 文字列 だったものが /Nums 数値にかわったものを数値ツリーと呼んでいます。
 +
 +
 
 +
 +
<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>/Kids</td>
 +
  <td>配列</td>
 +
  <td>子への参照を配列で指定。。</td>
 +
</tr>
 +
<tr style=" background: #eeeeee;">
 +
  <td>/Nums </td>
 +
  <td>配列</td>
 +
  <td>名前と参照の対を配列で指定</td>
 +
</tr>
 +
<tr>
 +
  <td>/Limits</td>
 +
  <td>配列</td>
 +
  <td>配列に対象とする最小値と最大値を指定する</td>
 +
</tr>
 +
</table>
  
 
 
 
 
  
 
=== '''関数''' ===
 
=== '''関数''' ===
 +
 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>/FunctionType ★</td>
 +
  <td>整数</td>
 +
  <td>関数のタイプを数値で以下より指定します。</td>
 +
</tr>
 +
<tr>
 +
  <td></td>
 +
  <td></td>
 +
  <td>0 : サンプリング関数</td>
 +
</tr>
 +
<tr>
 +
  <td></td>
 +
  <td></td>
 +
  <td>2 : 指数補完関数</td>
 +
</tr>
 +
<tr>
 +
  <td></td>
 +
  <td></td>
 +
  <td>3 : 縫合関数</td>
 +
</tr>
 +
<tr>
 +
  <td></td>
 +
  <td></td>
 +
  <td>4 : PostScript計算関数</td>
 +
</tr>
 +
<tr style=" background: #eeeeee;">
 +
  <td>/Domain ★</td>
 +
  <td>配列</td>
 +
  <td>2 × m[個] の配列。m個の最小値と最大値の組み合わせを指定。関数の変域の確認に使います。 </td>
 +
</tr>
 +
<tr>
 +
  <td>/Range</td>
 +
  <td>配列</td>
 +
  <td>/FunctionType 0 と 4で必須のキー。2 × m[個]の配列。m個の値域の最小値と最大値を指定します。</td>
 +
</tr>
 +
</table>
 +
 +
 +
 上記のキーでは、関数のタイプを選択して、関数の変域(数学ではよくxになる値)と値域(数学ではよくyになる値)の最小値と最大値を設定する感じです。値が最小値より下回ったら、最小値に置換し、最大値を上回ったら最大値に置換します。関数のタイプによって、続けて指定できるキーが変わります。以下に /FunctionType の値ごとのキー値について記述します。
 +
 
 +
==== '''/FunctionType 0 : サンプリング関数''' ====
 +
<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>/BitsPerSample ★</td>
 +
  <td>整数</td>
 +
  <td>サンプリングビット数</td>
 +
</tr>
 +
<tr>
 +
  <td>/Order</td>
 +
  <td>整数</td>
 +
  <td>サンプル間の補完の次数。1次, 2次, 3次近似とかの奴だわな。</td>
 +
</tr>
 +
<tr style=" background: #eeeeee;">
 +
  <td>/Encode </td>
 +
  <td>配列</td>
 +
  <td>変域のマッピング値 2 × m[個]の配列で指定します。始値と終値の対の個数分だけ指定します。</td>
 +
</tr>
 +
<tr>
 +
  <td>/Decode</td>
 +
  <td>配列</td>
 +
  <td>値域のマッピング値 2 × m[個]の配列で指定します。始値と終値の対の個数分だけ指定します。</td>
 +
</tr>
 +
</table>
 +
 +
 
 +
 +
 上記と必要なストリームのキーも使います。
 +
 +
 
 +
==== '''/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 内部構造]]に戻る。

2022年7月11日 (月) 00:00時点における最新版



個人用ツール
名前空間

変種
操作
案内
ツールボックス