メニューの表示→文字コードセットで、日本語を選んでいる場合、
®(®) や Ä(Ä) などを、Netscape は補助漢字(JIS X0212)
を使って表示しようとします(たとえ Latin-1(ISO 8859 1)に含まれていたとしても)。
このため jisx0212 のフォントをインストールしてやれば表示できるようになりま
す。例えば jisksp16-1990.bdf.Z などがそうです。FreeBSD の package になってい
ますので(ja-x0212fonts-1.0)で、近辺の FreeBSD 配布サイトあるいは CD-ROM から
取得してください(例えば
ftp://ftp.jp.FreeBSD.org/pub/FreeBSD/ports/distfiles/jisksp16-1990.bdf.Z)
SGML 文字参照表を文字コードセットを変えながら 見比べると、なかなか面白いです。
タイトル通りです。保存した PostScript ファイルに問題があるために、 Ghostscript で表示したり、PostScript ファイルに流しても日本字が出ません。
結論から先に書きますと、これを修正するのは困難なので、ファイル→印刷 (または印刷ボタン)で出るダイアログで、出力先をファイルにして印刷しましょう。 この場合は文字化けしません。
まず「日本語フォントの定義が無い」という問題があります。フォントが定義され
ていないのですから、日本語が出る筈はありません。
PostScript では日本語を出すのに使うフォントとして、
の2つがよく使われます。また PostScript 中で日本字が JIS でコードされている場 合は Ryumin-Light-H、Shift_JIS の場合は Ryumin-Light-RKSJ-H、日本語 EUC の場 合は Ryumin-Light-EUC-H のように名前が変わります。ですから
/of { /Ryumin-Light-EUC-H findfont exch scalefont setfont } bind def
のようにフォントを定義してやればこの問題はクリアできます。
しかしそれとは別に、「日本語の文字も英語の文字も一緒にコードされている」と
いう問題があります。つまり、Ryumin-Light で表示すべき文字も、Times で表示す
るべき文字も一緒にコードされているのです。ですから今まで Times で出力してい
たために文字化けしていた部分を Ryumin-Light で出力するように変更すると、今度
は英字部分が化けてしまいます。
もし英字や数字が全くない、あるいは全て全角(JIS X0208)で書かれている、とい
う場合は単にフォントを置き換えてしまえば良いですが、そういうページは小説のペー
ジなど特殊な場合(あるいはなんでも全角で書く人のページ)に限られるため、一般的
には日本字部分と英字部分に分離して、それぞれのフォントで表示するように変更し
なければなりません。ただしその場合自分で表示座標の計算をして moveto コマンド
を埋め込まなければなりません。
このため PostScript ファイルを作る時は、「印刷」を選んでファイルに保存する 方が良いと思います。この場合にはこのような問題は起きません。
Netscape ブラウザは日本語の文書を印刷する時、JIS コード(JIS X 0208) で定義 されていない文字を印刷する必要がある場合、たとえ Latin-1(ISO 8859)に含まれて いる文字であっても、補助漢字(JIS X 0212)を使用して PostScript を記述します。 普通の PostScript プリンタ、Ghostscript は補助漢字を搭載していないので、補助 漢字を印刷しようとすると、エラーを起こします。
Error: /rangecheck in --%op_show_continue-- Operand stack: Execution stack: %interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- 2 3 %oparray_pop --nostringval-- --nostringval-- false 1 %stopped_push 1 3 %oparray_pop .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- 1 3 %oparray_pop --nostringval-- --nostringval-- Dictionary stack: --dict:906/941(G)-- --dict:0/20(G)-- --dict:85/200(L)--
そこで補助漢字が使用されている部分を削ったり、Latin 1 を使うように書き換え ると、印刷ができるようになります。例えば 「test®」(test(R)) は
0 749.6 moveto 12 f0 (test ) show 12 of <8f81ec> show
のような PostScript コードで出力されるので、
0 749.6 moveto 12 f0 (test ) show 12 f0 (\251) show
と書き換えてやります。
これを自動的に行なうプログラムを Perl で書きました。
netscape_filter.pl
がそうです。
このフィルタプログラムを通せば、例えば SGML 文字参
照表もちゃんと印刷できます。ただし Netscape が表示できない文字はそもそも
PostScript コード中に出てきてないので、Latin-1 に対応する文字が含まれていて
も印刷できません。
例えば BSD プリントデーモンを使っているのであれば、/etc/printcap において PostScript プリンタであれば if または lf で指定しているフィルタにこのプログ ラムを直接指定するか、Ghostscript などを通すフィルタを既に指定しているのであ れば、
/usr/local/libexec/netscape_filter.pl | \ /usr/local/bin/gs -dSAFER -dNOPAUSE -q -sDEVICE=lips3 -sOutputFile=- -
のように書けば良いと思います(手元にプリンタがないのでわかりません)。