2007-01-30

FreeBSDのghostscript-afplでIPAフォントによる日本語表示

portsの依存関係でghostscriptが必要な場合、Mk/bsd.port.mkにより、デフォルトではprint/ghostscript-gnu (7.07)が入るようになっている。これとjapanese/ghostscript-gnu-jpnfontがあれば、日本語に関して特に何も文句のない環境ができあがるが、引越し前に他の版で遊んでみることにした。

TeX Wikiによれば、8.15は何かと不完全っぽいので、そこまで冒険するつもりもなく、print/ghostscript-afpl (8.54)を入れてみた。

最初に何も考えずに日本語PSファイルをgvで表示させると、kochi-mincho-subst.ttfがないと言われた。既に入っているのに見つけられないらしいが、どうせIPAにするからいいやと次に進む。フォントの設定はすぐにみつかり、/usr/local/share/ghostscript/8.54/lib/cidfmapにあった。

しかし単純にkochi-mincho-subst.ttfなどを/usr/local/share/fonts/TrueType/ipam.ttfなどに変更しただけでは、表示されなかった。フルパスなのでファイルがないとは言われないが、

Error: /invalidfileaccess in --.libfile--

となり、はまる。

まず、ソースを読んで、.libfileはGS_LIB内あるいはフルパス指定のファイルをオープンする演算子であることをつきとめる。しかし、ファイルは当然読めるし、どうしてinvalidなのかがわからず、右往左往する。TeX WikiにあるようにCIDFontとFontのディレクトリを掘ってリンクしたりファイルを作ったりしても、文字化けしたりしてうまくいかない。

ひょんなことから、gvではなくgs直接ならどうかとやってみたら、なんと日本語が表示されてしまった。ではgvでなぜだめかとコマンドラインを横取りしてみて、いくつも指定されたオプションを一つずつ調べていたら、どうやら-dSAFERが指定されているとだめらしい。gvに-nosaferを付け続けるのもいやなので、さらにSAFERが何をしてるか調べると、gs_init.ps内で、/PermitFileReadingなどを設定して、読むことまで禁止しているっぽい。

そしてさらに勘を働かせて、GS_LIB内のファイルならSAFERであっても読み出し禁止にならないだろうと、GS_LIBをきちんと設定してやると、ようやくgvでも日本語が表示されるようになった。GS_LIBを設定するのも避けるには、make時のマクロGS_LIB_DEFAULTに/usr/local/share/ghostscript/fontsが含まれていることから、ここに必要なフォントを入れるのが最善の解であろう。

サブディレクトリも扱えるのがわかり、最終的な解決として、cidfmap内のkochi-{mincho,gothic}-subst.ttfをTrueType/ipa{m,p}.ttfに変更し、/usr/local/share/ghostscript/fonts/TrueTypeを作ってipa{m,p}.ttfのリンクを置くことにした。

で、このように日本語が扱えるようになったghostscript-afplを今後使うかどうかは実は微妙。全体に薄い感じの表示になるのは設定でなんとかなるかもしれないが、最大の問題は、遅いこと。TrueTypeなどのバイナリをPSのレベルで解釈しているのか、ページができあがっていくのが見えてしまう。たぶん、すぐ消してghostscript-gnuを入れてしまう気がする。

それにしても、gsのエラー表示がもっとわかりやすければ、もっと楽に解決できそうなものなのに。

追記

-dSAFERで探したら、ふログでは、ps2pdfwr内の-dSAFERを削除することでps2pdfに関して解決していた。gvとかghostviewとかcups/プリンタドライバ系とかのgs依存ツールを他に使わないのならそれでもいっか。

0 件のコメント: