使用上の問題点


SGML 文字符合参照で書かれた文字が表示されません

 メニューの表示→文字コードセットで、日本語を選んでいる場合、 ®(®) や &Auml(Ä) などを、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 ファイル(印刷)の問題


ファイル→名前を付けて保存(File → Save As)でドキュメン トの保存形式をPostScrit にした場合、文字化けする

 タイトル通りです。保存した 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 ファイルを作る時は、「印刷」を選んでファイルに保存する 方が良いと思います。この場合にはこのような問題は起きません。


印刷しようとすると "rangecheck" という PostScript エ ラーが起きることがある

 Netscape ブラウザは日本語の文書を印刷する時、JIS コード(JIS X 0208) で定義 されていない文字を印刷する必要がある場合、たとえ Latin-1(ISO 8859)に含まれて いる文字であっても、補助漢字(JIS X 0212)を使用して PostScript を記述します。 普通の PostScript プリンタ、Ghostscript は補助漢字を搭載していないので、補助 漢字を印刷しようとすると、エラーを起こします。

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=- - 

のように書けば良いと思います(手元にプリンタがないのでわかりません)。

目次へ戻る



mistral@imasy.or.jp SARUMARU Yoshihiko
最終更新: 1999年08月22日21時48分