グラフィック状態
グラフィックには、色や線の太さなどのパラメータ値が存在し、それらは「グラフィック状態」と呼ばれます。
PDF ビューアは、内部でそのグラフィック状態を保持しており、ページ内では、現在設定されている各パラメータ値が維持されます。
このグラフィック状態は、すべての項目を一つにまとめた状態で、スタック上に PUSH (格納) したり、POP (取り出し) することができます。
特に、変換行列を元に戻す時などによく使われます。
各グラフィック状態は、グラフィック命令を使って設定するものと、グラフィック状態の辞書にエントリを含めることで設定するものがあります。
まずは、グラフィック状態の各項目の説明をします。
なお、描画色などは、ストロークの描画時用と、それ以外の描画用に分かれています。
ストローク以外の描画用は、塗りつぶし時など、ストローク以外を描画する時に使われます。
PDF ビューアは、内部でそのグラフィック状態を保持しており、ページ内では、現在設定されている各パラメータ値が維持されます。
このグラフィック状態は、すべての項目を一つにまとめた状態で、スタック上に PUSH (格納) したり、POP (取り出し) することができます。
特に、変換行列を元に戻す時などによく使われます。
各グラフィック状態は、グラフィック命令を使って設定するものと、グラフィック状態の辞書にエントリを含めることで設定するものがあります。
まずは、グラフィック状態の各項目の説明をします。
なお、描画色などは、ストロークの描画時用と、それ以外の描画用に分かれています。
ストローク以外の描画用は、塗りつぶし時など、ストローク以外を描画する時に使われます。
出力デバイスに依存しないグラフィック状態 | ||
CTM | array | 変換行列 |
---|---|---|
クリッピングパス | - | 現在のクリッピングパス。 default = 出力ページにおいて画像化可能な部分全体 |
色空間 | name or array | 現在の色空間。 default = DeviceGray (グレイスケール) |
描画色 | 色々 | 現在の描画色。値の指定は色空間による。 default = 黒 |
テキスト状態 | 色々 | テキストの描画に関する9つのパラメーターのセット。 フォントの選択、グリフのスケーリング、他の効果などのパラメーターが含まれる。 |
線の太さ | number | ストロークの線の太さ (ユーザー空間単位)。 default = 1.0。 0 は、デバイスの解像度で描画できる最も細い線。 |
線の形状 (line cap) | integer | ストロークの閉じられていない端の形状。 default = 0。 0 (Butt cap) : パスの終点で四角にする。 1 (Round cap) : 線幅を直径とする半円が描かれる。 2 (Projecting square cap) : パスの終点から線幅の半分を延ばして四角にする。 |
線の結合 (line join) | integer | ストロークの接続されている部分の結合形状。 default = 0。 0 (Miter join) : 線の外側の縁は、2つが交わるまで延長される (鋭利な三角になる)。 角度が鋭すぎる場合は、代わりに Bevel join が使われる。 1 (Round join) : 線幅を直径とする円弧が描かれる (角丸)。 2 (Bevel join) : Butt cap で終点を仕上げた後、端の部分は三角形で塗りつぶす。 |
miter limit | number | 結合の形状に Miter join が指定されている場合、Bevel join に切り替える制限値。 接続部分のストロークの、内側から外側の縁までの距離と、線幅の比率で指定する。 default = 10.0 (約 11.5 度)。 miterLength / lineWidth = 1 / sin(angle / 2) |
破線パターン | array + number | ストロークの破線パターン。 default = 実線。 「破線のパターンの配列」と「フェーズの数値」の2つを、ユーザー空間単位で指定する。 配列の要素は、実線と空白を交互に繰り返す長さ。1 以上の数値を指定する。 フェーズは、開始位置。パターンで生成された線に、この値のオフセットを追加する形となる。 [] 0 | 実線 [3] 0 | ***___***___ [2] 1 | *__**__** [2 1] 0 | **_**_**_ [3 5] 6 | __***_____***_____ [2 3] 11 | *___**___**___ 各破線の終端は line cap で処理され、角は line join で処理される。 複数のサブパスで構成されるパスの場合は、各サブパスは独立した線となる。 |
rendering intent | name | CIE ベースの色をデバイスの色に変換するときに使用されるレンダリングインテント。 default = RelativeColorimetric |
stroke adjustment | boolean | (PDF 1.2) 出力デバイスのピクセル解像度に比べて、小さい線幅でストロークを描画するときに、可能なラスタ化効果を補正するかのフラグ。 default = false |
blend mode | name or array | (PDF 1.4) 透明なイメージングモデルで使用される現在のブレンドモード。 このパラメータは、透明グループ XObject の実行の開始時に、暗黙的に初期値にリセットされる。 default = Normal |
soft mask | dictionary or name | (PDF 1.4) 透明なイメージングモデルで使用する、マスク形状またはマスク不透明度の値を指定するソフトマスク辞書、または、そのようなマスクが指定されていない場合は /None という名前。 このパラメーターは、透明グループ XObject の実行の開始時に暗黙的に初期値にリセットされる。 default = /None |
alpha constant | number | (PDF 1.4) 透明なイメージングモデルで使用される、一定の形状または一定の不透明度値。 このパラメーターは、透明グループ XObject の実行の開始時に暗黙的に初期値にリセットされる。 default = 1.0 |
alpha source | boolean | (PDF 1.4) 現在の soft mask と alpha constant パラメーターを、形状値(true)または不透明度値(false)として解釈するかどうかのフラグ。 このフラグは、画像辞書内の SMask エントリ(存在する場合)の解釈も管理する。 default = false |
overprint | boolean | (PDF 1.2) false の場合、描画時に色がない部分を消去する。 true の場合、色がない部分は消去せず、以前に描画された状態のままにする。 default = false |
overprint mode | number | (PDF 1.3) overprint = true の時、DeviceCMYK 色空間の色値 0 を消去するか (0)、そのままにするか (1)。 default = 0 |
出力デバイスに依存するグラフィック状態 | ||
black generation | function or name | (PDF 1.2) RGB カラーを CMYK に変換するときに使用するブラックカラーコンポーネントのレベルを計算する関数。 default = インストール依存 |
undercolor removal | function or name | (PDF 1.2) シアン、マゼンタ、イエローの色成分のレベルの減少を計算して、黒生成によって追加された黒の量を補正する関数。 default = インストール依存 |
transfer | function, array, or name | (PDF 1.2) デバイスのグレーまたはカラーコンポーネントレベルを調整して、特定の出力デバイスの非線形応答を補正する機能。 default = インストール依存 |
halftone | function, stream, or name | (PDF 1.2) グレーおよびカラーレンダリング用のハーフトーンスクリーン。 ハーフトーン辞書またはストリームとして指定されます。 default = インストール依存 |
flatness | number | 出力デバイスで曲線がレンダリングされる精度。 このパラメーターの値は、出力デバイスのピクセルで測定された最大許容誤差を示します。 数値が小さいほど曲線が滑らかになりますが、計算量とメモリ使用量が増えます。 default = 1.0 |
smoothness | number | (PDF 1.3) 出力デバイス上で色のグラデーションをレンダリングする際の精度。 このパラメーターの値は、各色成分の範囲の一部として表される最大許容誤差を提供します。 数値が小さいほど色が滑らかになりますが、計算量とメモリ使用量が増えます。 default = インストール依存 |
グラフィック状態を設定する命令
グラフィック命令で各状態を設定する場合は、以下の命令を使います。
ページが変わった場合は、設定は引き継がれません。
ページが変わった場合は、設定は引き継がれません。
オペランド | 命令 | 説明 |
---|---|---|
- | q | グラフィック状態をスタックに保存 |
- | Q | グラフィック状態をスタックから復元 |
a b c d e f | cm | 現在の変換行列を変更 (配列ではなく6つの数値を指定) |
数値 | w | 線の太さを設定 |
数値 | J | line cap スタイルを設定 |
数値 | j | line join スタイルを設定 |
数値 | M | miter limit を設定 |
配列 フェーズ | d | 破線パターンを設定 |
intent | ri | (PDF 1.1) カラーレンダリングインテントを設定 |
数値 | i | 平坦度の許容値を設定 (0〜100) |
名前 | gs | (PDF 1.2) 指定された任意の名前のパラメータを設定。 現在のリソース辞書の ExtGState エントリの辞書の中にある、 グラフィックス状態パラメータ辞書の名前を指定する。 |
グラフィック状態パラメータ辞書
グラフィック状態の一部は、任意の名前で定義したものを、まとめて gs 命令で設定することができます。
単一ページ内、または複数のページで、同じグラフィック状態を複数回設定する場合に有用です。
グラフィック状態の定義は、ページオブジェクト(またはページツリーノード)の Resources エントリ内で行います。
Resources エントリの辞書の中に、ExtGState エントリを含めて、その値となる辞書で定義します。
辞書のキーに「グラフィック状態の任意の名前」を、値に「パラメータ辞書への間接参照」を指定します。
なお、Resources エントリは、子孫のページに継承可能であるため、複数のページで同じリソースを使うことができます。
gs 命令では、オペランドとして、辞書で定義した任意の名前を指定します。
単一ページ内、または複数のページで、同じグラフィック状態を複数回設定する場合に有用です。
グラフィック状態の定義は、ページオブジェクト(またはページツリーノード)の Resources エントリ内で行います。
Resources エントリの辞書の中に、ExtGState エントリを含めて、その値となる辞書で定義します。
辞書のキーに「グラフィック状態の任意の名前」を、値に「パラメータ辞書への間接参照」を指定します。
なお、Resources エントリは、子孫のページに継承可能であるため、複数のページで同じリソースを使うことができます。
gs 命令では、オペランドとして、辞書で定義した任意の名前を指定します。
グラフィック状態パラメータ辞書
Type | name | (オプション) オブジェクトのタイプ。常に /ExtGState |
---|---|---|
LW | number | (PDF 1.3) 線の太さ |
LC | integer | (PDF 1.3) line cap スタイル |
LJ | integer | (PDF 1.3) line join スタイル |
ML | number | (PDF 1.3) miter limit |
D | array | (PDF 1.3) 破線パターン。 [パターン配列 フェーズ] の配列で指定。 |
RI | name | (PDF 1.3) レンダリングインテントの名前 |
OP | boolean | オーバープリントを適用するかどうか。 op が指定されていない場合は、ストローク用とストローク以外用の両方のパラメータを設定します。 op が指定されている場合は、ストローク用のパラメータのみ設定します。 |
op | boolean | (PDF 1.3) オーバープリントを適用するかどうか (ストローク以外用) |
OPM | integer | (PDF 1.3) オーバープリントモード |
Font | array | (PDF 1.3) フォントの指定。 [font size] の配列で指定する。 font はフォント辞書への間接参照で、size は文字サイズ (テキスト空間単位の数値)。 |
BG | function | [0.0 1.0]→[0.0 1.0] にマッピングする黒色の生成関数 |
BG2 | function or name | (PDF 1.3) BG と同じだが、値に /Default が使用可能。 Default の場合、ページ開始時に有効な関数を示す。 BG も存在する場合は、こちらが優先される。 |
UCR | function | [0.0 1.0]→[-1.0 1.0] にマッピングする undercolor-removal 関数 |
UCR2 | function or name | (PDF 1.3) BG/BG2 の場合と同じ |
TR | function, array, or name | [0.0 1.0]→[0.0 1.0] にマッピングする伝達関数。 単一の関数、または4つの関数の配列、または /Identity。 |
TR2 | function, array, or name | (PDF 1.3) BG/BG2 の場合と同じ |
HT | dictionary, stream, or name | ハーフトーン辞書、またはストリーム、または /Default。 |
FL | number | (PDF 1.3) 平坦度の許容範囲 |
SM | number | (PDF 1.3) 滑らかさの許容範囲 |
SA | boolean | ストロークの自動調整を適用するかどうか |
BM | name or array | (PDF 1.4) 透明なイメージングモデルで使用される現在のブレンドモード |
SMask | dictionary or name | (PDF 1.4) 透明なイメージングモデルで使用するマスク形状またはマスク不透明度の値を指定する現在のソフトマスク |
CA | number | (PDF 1.4) 透明なイメージングモデルで使用される一定の形状または一定の不透明度の値を指定する現在のストロークアルファ定数 (ストローク用) |
ca | number | (PDF 1.4) CA と同じだが、ストローク以外用 |
AIS | boolean | (PDF 1.4) アルファソースフラグ。 現在のソフトマスクとアルファ定数を、形状値(true)または不透明度値(false)として解釈するかどうか。 |
TK | boolean | (PDF 1.4) 透明イメージングモデルのテキストオブジェクト内で重複するグリフの動作を決定するテキストノックアウトフラグ |
使用例
>> 11.pdf
line cap と line join の各スタイルの確認と、グラフィック状態パラメータ辞書による設定を行っています。
line cap と line join の各スタイルの確認と、グラフィック状態パラメータ辞書による設定を行っています。
3 0 obj << /Type /Page /Parent 2 0 R /MediaBox [ 0 0 612 792 ] /Resources 4 0 R % リソース辞書 /Contents 6 0 R >> endobj %% リソース辞書 4 0 obj << /ExtGState << /GS1 5 0 R >> % /GS1 という名前で定義 >> endobj %% グラフィック状態パラメータ辞書 (/GS1 の内容) 5 0 obj << /Type /ExtGState /LW 2 % 線の太さ /LC 0 % join cap = 0 /D [[1 2] 0] % 破線パターン >> endobj 6 0 obj << /Length 231 >> stream 1 0 0 -1 0 792 cm % 左上原点→左下原点への変換 8 w % 線の太さ 50 50 m 200 50 l S % 直線を描画 1 J % join cap = 1 50 100 m 200 100 l S 2 J 50 150 m 200 150 l S 0 J [5 3] 0 d % join cap = 0, 破線パターン 50 200 m 200 200 l S [] 0 d % 実線に戻す 300 50 100 100 re S % 四角形 1 j % line join = 1 300 200 100 100 re S 2 j 300 350 100 100 re S /GS1 gs % /GS1 の内容を適用 50 250 m 200 250 l S endstream endobj