Ghostscriptで日本語TrueTypeフォントを使う方法 (実験)
(2000-11-18: GS-CJKメーリングリストができています!)
(2000-03-24: 山田泰司さんによる
Tips on PostScript では,
このページの方法を改良して CJK の TrueType フォントを表示させています!)
最近のGhostscriptは OCF や CID という形式のPostScriptフォントに
対応していますから,日本語PostScriptフォントさえ持っていれば
日本語を表示することができます。
でも,PostScriptフォントはTrueTypeフォントに比べて高価ですし,
取り扱えるアプリケーションがそれほどありませんから,
品質の良いPostScriptフォントを持っている人は少ないことでしょう。
それに比べてTrueTypeフォントは安く手に入るので,
Ghostscript では VFlib や FreeType に TrueTypeフォントを
ラスタライズさせることによって日本語表示を実現するのが一般的です。
ところで,最近の Ghostscript には TrueType フォントをラスタライズする
機能があり,簡単に欧文TrueTypeフォントが表示できるようになっています。
この機能を利用すれば VFlib や FreeType なしでも日本語TrueTypeフォントの
表示ができるのではないかと試行錯誤した結果,試しに表示してみるくらいなら
簡単にできることがわかりました。
まだ様々な問題があり,実用には程遠いと思いますが,
このページでは Ghostscript (5.99) 単体で日本語TrueTypeフォントを
表示する方法について書いていきます。
※ ちなみに
内山さんのページによれば,Adobe の
Value Pack
で安く日本語CIDフォントを入手できるようです。
手順
最小限の概略だけを示します。
ディレクトリ・ファイル名,フォント名,その他は適当に読み換えてください。
- /usr/local/share/ghostscript/5.99/lib/gs_ttf.ps にパッチ(2000-02-29更新)をあてる。
- まだ置いていなければ,/Resource/CMap/ 以下に H, V, ... などの CMap を置く。
ftp://ftp.oreilly.com/pub/examples/nutshell/cjkv/adobe/
から入手できます。(日本語に関係があるのは aj12 と aj20。)
- /Resource/CIDFont/MS-Mincho を作る。
(/usr/local/share/ghostscript/fonts/msmincho.ttc)
.loadfakettcidfont pop
- /Resource/TrueType/ に Unicode と
Shift-JIS を置く。
- /usr/local/share/ghostscript/fonts/ もしくは /Resource/Font/ に
MS-Mincho-H などを作る。
/MS-Mincho-H
/H /CMap findresource
[/MS-Mincho /CIDFont findresource]
composefont pop
以上です。たとえば
/MS-Mincho-H findfont 100 scalefont setfont
100 100 moveto <4e6b 4c5a 3d28 392c> show
で,私の名前が表示されると思います。^^;
これで MS-Mincho を普通の CIDフォントだと思って使うことができます。
もちろん Ryumin-Light という別名を付けたり,
H 以外の CMap を適用することもできます。
なお,ここで配布している gs_ttf.ps.diff はパブリックドメインとします。
問題点
山積みです……。現在まともな形に書き直していますのでしばらくお待ちください……。
- まだ MS-Mincho と HGHeiseiMinchotaiW3 だけしか試していません。
一応 MS-Mincho は Unicode,HGHeiseiMinchotaiW3 は Shift-JIS の
TrueType フォントなので,どちらも表示できてはいるようです。
まだほとんど試していませんが。
- CIDフォント(FontType 2)を fake しているため,CMap による変換のあと,
CIDからフォントの文字コードへの変換の処理を入れています。その変換テーブルは
Unicode と Shift-JIS という2つのファイルをリソース(Category TrueType)として
置くことによって与えていますが,もっといい方法があるでしょう。
また,変換の部分の PostScript プログラムは adhoc で,
エラーなどに弱いと思われます。
- CID → Unicode, SJIS, ... のテーブルが Adobe-Japan1-2 しか考慮していない。
構造を変える予定。
- いちいち MS-Mincho だとか MS-Mincho-H などのファイルを作るのは
面倒なので,resource と font を定義する初期化ファイルを作ったほうがいいかも。
- MS-Mincho などの名前が TrueType フォント内に書かれている
PostScript フォント名に固定されている。
- 縦書きに未対応。
(gs_cidfn.ps の Type11BuildGlyph に Type9BuildGlyph と同様の変更が必要?
→ gstype42.c の sbw あたりに vmtx から情報を入れる必要があるかな……。)
- TrueTypeフォントに含まれていないグリフの問題。
- 縦書き用の「。」などは TrueType フォントに含まれている。
GSUB で script は kana のみ,feature は vert のみと仮定して
しまうと楽だけど大丈夫か? (msmincho.ttc, hgrhm3sj.ttc などは OK.)
- CIDフォント特有のグリフは日本語PDFパッチと
同様の対処が必要。
- GhostscriptのCIDフォント対応の修正が必要。
- usecmapが使えない。fix. (cf. V)
Fixed in gs6.0.
- cshowで文字が表示されてしまう。(cf. article9.ps)
CIDFontType 0 だけかも?
- cshow中で,もらった文字をそのままshowに渡しても rangecheck エラー。
(cf. vchars.ps)
いまのコード(zchar.c)ではCIDの下位バイトを渡さないといけない……。
fix. Fixed in gs6.01.
表示例
松田さんの例と
比較できるように文章とサイズをそろえてみました。
フォントが違いますが,オリジナルのVFlibと同程度の品質であることがわかります。

HGHeiseiMinchoW3 (18 point / 96 dpi)

HGPHeiseiMinchoW3 (18 point / 96 dpi)
関連情報
-
Aladdin Ghostscript tester / beta filesets
-
GhostscriptでCIDフォントを使う (田中哲さん)
-
GhostscriptでOCFフォントを使う (内山孝憲さん)
-
Ghostscriptと日本語 (田中哲さん)
-
GhostscriptとFreeType (松田一朗さん)
-
Ghostscriptによる日本語PDFの表示 (片山紀生さん)
-
Tips on PostScript (山田泰司さん)
鈴木秀幸 (Hideyuki Suzuki) <hideyuki@sat.t.u-tokyo.ac.jp>
$Id: truetype.html,v 1.43 2001/02/04 04:07:07 hideyuki Exp $