

PostScriptではフォントはフォント辞書のことです。
フォントのグリフ(字形)を使って文字を描画します。
一般的にフォントと書体が混同されてしまっていますのでここで簡単な定義をしておきます。
・字体(type):文字の骨組み
・字形(gryph):図形として表現したもの
・書体(type face):一貫したデザインで形成された字形の集合体
・フォント(font):同じサイズで、書体デザインの同じ活字の一揃い
・文字:抽象的なシンボル
・テキスト:文章等のひとまとまり 文字列
何故こんな間違いが普及したのかというと、恐らくパソコンのFontsフォルダに収められていたから書体をフォントと呼ぶようになったのかと思います。

テキスト描画の指定方法です。
「Sample」という文字列をHelveticaという書体で32ポイントの大きさで原点(0,0)に描画します。
文字列は( )括弧で囲みます。
1 2 3 4 5 6 7 8 9 10 11 | %!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:書体の指定の仕方 0 setgray 0 0 240 240 rectstroke % 黒背景 120 120 translate % 座標の原点を中央に移動 /Helvetica findfont % 使用するフォントの選択 32 scalefont setfont % フォントを32倍に拡大し、カレントフォントに設定する 0 0 moveto % 描画する位置(0,0)を指定 (Sample) show % 文字列Sampleを描画する |

文字列をセンター合わせにします。
stringwidthでテキストの横幅を取得し、その半分をマイナス側に移動させることでセンター合わせとなります。
1 2 3 4 5 6 7 | % ヘッダーコメント、背景、座標設定等は略しています /Helvetica findfont % 使用するフォントの選択 32 scalefont setfont % フォントを32倍に拡大し、カレントフォントに設定する (Sample) stringwidth % テキストの横幅を求め、移動する距離を返す。 Wx Wy % スタック内のWyとWxを入れ替えて距離Wxを-2で割ってマイナス側に始点を移動 exch -2 div exch moveto (Sample) show % 文字列Sampleを描画する |

改行します。
センター合わせのプロシージャと改行のプロシージャを作って、メイン部分を簡潔にしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | % ヘッダーコメント等は省略しています /center_show { % センター合わせのプロシージャ % 文字列を複製し(dup)文字列の幅を得て(stringwidth)、辞書を削除し(pop) % -2で割る( -2 div)→x方向の移動量 y座標の移動量(0) 移動し(rmoveto) % 文字列を描画(show) dup stringwidth pop -2 div 0 rmoveto show } def % 改行プロシージャ 0(x座標) 現在の座標を得る(currentpoint)→20.0 0.0を % 入れ替え(exch)→0.0 20.0、0.0を削除(pop)→20.0(y座標) % 38を引く(38 sub) 始点の移動(moveto) /newline { 0 currentpoint exch pop 38 sub moveto } def % 背景、座標設定等は略しています 0 20 moveto /Helvetica 32 selectfont (Sample) center_show newline % 文字列Sampleを描画し改行する (PostScript) center_show |

文字間の空きを設定します。
1 2 3 4 5 6 7 8 9 10 11 12 | % ヘッダーコメント等は省略しています /text (Sample) def % 文字列の定義 /aki 20 def % 文字間の空きの定義 /center_show { % センター合わせのプロシージャ text stringwidth pop -2 div 0 rmoveto ashow } def % 空きを入れた分センター合わせが狂ってくるのでその補正プロシージャ /aki_hosei { text length 1 sub aki mul -2 div } def % 背景、座標設定等は略しています aki_hosei 0 moveto % 始点を移動 /Helvetica 32 selectfont aki 0 text center_show % 文字列Sampleを 文字間を開けて描画する |

文字列を右合わせにします。
1 2 3 4 5 6 7 8 9 10 11 12 | % ヘッダーコメント等は省略しています /right_show { % 左合わせのプロシージャ dup stringwidth pop neg 0 rmoveto show } def /newline { 50 currentpoint exch pop 38 sub moveto } def % 背景、座標設定等は略しています 50 0 moveto /Helvetica 32 selectfont (Sample) right_show newline (PostScript) right_show |

日本語を表示します。MacのOsakaは特別な設定は必要ありません。
ファイルはShift_JISで保存します。他のフォントは文字化けします。
1 2 3 4 5 6 7 8 | % ヘッダーコメント等は省略しています /center_show { dup stringwidth pop -2 div 0 rmoveto show } def % 背景、座標設定等は略しています 0 0 moveto /Osaka 32 selectfont (サンプル) center_show |

ヒラギノ角ゴ Std W6を指定します。プレビュー.appやIllustrator、PhotoShopではエラーで変換できませんが、Distillerでは変換できました。
CIDフォントに関してはこちらのサイトを参考にいたしました。
1 2 3 4 5 6 7 8 9 10 11 | % ヘッダーコメント等は省略しています /center_show { dup stringwidth pop -2 div 0 rmoveto show } def % CIDフォントの設定 /HiraKakuStd-W6-RKSJ-H /RKSJ-H [/HiraKakuStd-W6] composefont /HiraKakuStd-W6-RKSJ-H 48 selectfont % 背景、座標設定等は略しています 0 0 moveto (サンプル) center_show |

ヒラギノ明朝 Std W6を指定し縦書きで表示します。RKSJ-HのHをVに変えます。
1 2 3 4 5 | /HiraMinStd-W6-RKSJ-V /RKSJ-V [/HiraMinStd-W6] composefont pop /HiraMinStd-W6-RKSJ-V 32 selectfont % 背景、座標設定等は略しています 0 64 moveto (サンプル) show |
【オペレータの説明】
キー findfont | キー名のフォント辞書を得て、オペランドスタックにpushする。 (例)/Times-Roman findfont |
フォント 拡大・縮小率 scalefont | フォントを拡大・縮小する。フォントの標準サイズは高さが1 単位。 (例)/Times-Roman 12 scalefont |
フォント setfont | フォントをカレントフォントに設定する。 (例)/Times-Roman setfont |
(文字列) show | カレントフォントで文字列を描画する。 (例)(Sample) show |
Ax Ay (文字列) ashow | 描画するグリフの幅を一括して調整する。 (例)10 0(Sample) ashow |
キー CMap ファイル CIDFont composefont | CMapファイル、CIDFontを参照し、CIDフォント辞書を作成。definefontを実行しフォント辞書にキーの名前を付けてFont リソースカテゴリに登録する。 ※CIDフォントとは日本語や中国語、朝鮮語のような膨大な文字セットを持つ言語を扱うためのフォーマット。http://www.morisawa.co.jp/culture/dictionary/1920 |
キー 拡大率 selectfont | キー名のフォント辞書を得て拡大・縮小し、カレントフォントに設定する。 従来の指定の仕方より短くてすむ。 /Helvetica findfont 12 scalefont setfont ↓ /Helvetica 12 selectfont |
文字列 stringwidth | 文字列のグリフ幅の合計値を求め、カレントポイントの移動距離(Wx、Wy)を返す (例) /HiraMinStd-W6-RKSJ-H /RKSJ-H [/HiraMinStd-W6] composefont /HiraMinStd-W6-RKSJ-H 12 selectfont (サンプル) stringwidth pstack 結果:0.0 72.0044 -dict-結果から分かるようにスタックの先頭に辞書があるので、stringwidthを使う場合は辞書をpopすること。 |
currentpoint | カレントポイントの座標値(x、y)を返す。 |
pstack | オペランドスタック上のオブジェクトを標準出力(Distiller等のジョブログ画面)に表示する。 スタックの内容は変更しないのでバグ取りに利用する。 |
== | オペランドスタック上のオブジェクトをpopしテキストに変換して標準出力に表示する。 主にバグ取りに使用する (例)x == |
文字列 length | 文字列の文字数を返す。 lengthはポリモーフィックなオペレータの一つで、型が異なるオペレータ、例えば配列、辞書などにも型に応じて適用されます。配列の場合は配列の要素数を返します。 ポリモーフィックなオペレータは他にはget、put、copyなどがあります。 |
コメント