Hatena::ブログ(Diary)

sirocco の書いてもすぐに忘れるメモ

2012-09-01

PostScript で 機種依存文字でも文字化けのないPDFを作る(Windows限定)。

| 06:51 |

今までは以下の理由でEUC-JPフォントを使ってきました。

日本語文字列出力を参考に、EUC-JPでテキストを作り、/Ryumin-Light-EUC-H のように EUC-JPフォントを指定してきたのです。

しかし、この設定ですと、蠅筬,里茲ΔWIndows 機種依存文字はRyumin-Light-EUC-Hに含まれていないために豆腐文字になってしまいます。業務に用いる帳票には機種依存文字が含まれていますので、そのまま印刷するのには不都合です。

昨日、C:\Program Files\Adobe\Reader 10.0\Resource\CMap の中を見ると「90ms」の文字があるのに気が付きました。

sirocco@sirocco-PC /C/Program Files/Adobe/Reader 10.0/Resource/CMap
$ ls
83pv-RKSJ-H     90pv-RKSJ-H      Adobe-Japan1-1  Adobe-Japan1-90ms-RKSJ  EUC-H       Identity-V        UniJIS-UCS2-V
90ms-RKSJ-H     90pv-RKSJ-UCS2   Adobe-Japan1-2  Adobe-Japan1-90pv-RKSJ  EUC-V       UCS2-90ms-RKSJ    UniJIS-UTF16-H
90ms-RKSJ-UCS2  90pv-RKSJ-UCS2C  Adobe-Japan1-3  Adobe-Japan1-H-CID      Ext-RKSJ-H  UCS2-90pv-RKSJ    UniJIS-UTF16-V
90ms-RKSJ-V     Add-RKSJ-H       Adobe-Japan1-4  Adobe-Japan1-H-Host     Ext-RKSJ-V  UniJIS-UCS2-H     UniJIS2004-UTF16-H
90msp-RKSJ-H    Add-RKSJ-V       Adobe-Japan1-5  Adobe-Japan1-H-Mac      H           UniJIS-UCS2-HW-H  UniJIS2004-UTF16-V
90msp-RKSJ-V    Adobe-Japan1-0   Adobe-Japan1-6  Adobe-Japan1-UCS2       Identity-H  UniJIS-UCS2-HW-V  V

ms はきっと Microsoftのことで、MS-Mincho-90ms-RKSJ-H を使うと文字化けは起きなくなるのではないかと思い、やってみると予想通り文字化けはなくなりました。

90ms-RKSJ-H とは何なのか検索してみると、90msが文字セット、RKSJが符号化方式、Hが組み方向を表していることが分かりました。

PDF Adviser エンコーディング

83pv-RKSJのお話】「83pvは文字セットを表わし「83年度版JIS(JIS X 0208-1983)準拠の文字セットで、部分的に縦組用文字を含む(partially vertical)セット」という意味」だそうです。

0x5cを含む文字については「表\示」「\\」のように\を挿入することにします。


%!PS-Adobe-3.0 EPSF-3.0
% SJIS で保存。
% 参考:TeXが苦手とする処理
% http://oku.edu.mie-u.ac.jp/~okumura/texwiki/?TeX%E3%81%8C%E8%8B%A6%E6%89%8B%E3%81%A8%E3%81%99%E3%82%8B%E5%87%A6%E7%90%86

/mm {2.834645669 mul} def

/verticalPosition   297 mm 20 mm sub def  % A4 297mm
/horizontalPosition 25 mm  def

/newline { /verticalPosition verticalPosition 20 sub def
           horizontalPosition verticalPosition moveto } def 

/putStrLn   { findfont 15 scalefont setfont show newline } def

horizontalPosition verticalPosition moveto
(---------------- 0x5c を含む文字------)  /MS-Mincho-90ms-RKSJ-H  putStrLn
% 実際に記入すると文字化けを起こしてしまいます。
(---------------- 機種依存文字------)     show newline
showpage

f:id:sirocco:20120901063825p:image

【参考】

siroccosirocco 2012/09/11 05:07 CMap ファイルの 90ms-RKSJ-UCS2 は Shift JIS と Unicode の関係を示すためのもの。(http://arq.name/tex/jpdfbook.html)