2013年06月23日 Linux(ghostscript, ps2pdf)で、Eudc.TTE(外字 PUA)を使ったPDFを作成する方法 [長年日記]
_ Eudc.TTEをMS-WindowsからLinuxに持って来る
Slackware-14.0で色々試してみた。
# cp /mnt/MS-Windows/WINDOWS/Fonts/Eudc.TTE /usr/share/fonts/TTF/eudc.ttf
Linux側での拡張子は.ttfにしておくこと。
xlib経由でのアクセスのための設定を行う。
# cd /usr/share/fonts/TTF/ # mkfontscale -e /usr/X11R6/lib/X11/fonts/encodings -e /usr/X11R6/lib/X11/fonts/encodings/large # mkfontdir -e /usr/X11R6/lib/X11/fonts/encodings -e /usr/X11R6/lib/X11/fonts/encodings/large
mkfontscaleで/usr/share/fonts/TTF/fonts.scaleが生成される。mkfontdirで/usr/share/fonts/TTF/fonts.dirが生成される。fonts.scaleやfonts.dirを手で編集している場合は、編集内容がスッ飛ぶので注意すること。
fontconfig経由でのアクセスのための設定を行う。
# fc-cache -f -v
ここまでの設定で、
$ xfd -fn "-misc-eudc.ttf-medium-r-normal--0-0-0-0-p-0-iso10646-1"
で、外字フォントを画面で確認出来たり、OpenOffice|LibreOffice上で、[挿入(I)], [記号と特殊文字(P)], [フォント(F)]からEUDCを選択して外字フォントを利用できる状態になっている。
_ CMapファイルの作成
さて、ここからが肝心のghostscript対応となる。
Eudc.TTEのコード範囲(Unicodeでの、U+E000からU+F8FFまで)のUTF-8とCIDとの対応テーブル(CMap)を作成するのだが、/usr/share/ghostscript/9.05/Resource/CMap/Identity-UTF16-HというCMapファイル(こちらはUTF-16とCIDの対応テーブル。たぶん1対1の対応なのだが...)があるので、これを雛型にする。
begincidrangeの内容を手書きするのは大変なので、プログラムで生成する。UTF-8 - ウィキペディア - Wikipediaを参考。
#include <stdio.h> main() { unsigned int i, start, base1, base2, base3, byte1, byte2, byte3; base1 = 0xe0; base2 = 0x80; base3 = 0x80; for (i = 0xe000; i <= 0xf8ff; i++){ byte1 = ((i >> 12) & 0xf) | base1; byte2 = ((i >> 6) & 0x3f) | base2; byte3 = (i & 0x3f) | base3; if (byte3 == 0x80){ printf("<%02x%02x%02x> ", byte1, byte2, byte3); start = i; }else if (byte3 == 0xbf){ printf("<%02x%02x%02x> %d\n", byte1, byte2, byte3, start); } } }
上記のプログラムの出力を雛型に組み込んで、多少ごにょごにょして以下のCMapをでっちあげた。
/usr/share/ghostscript/9.05/Resource/CMap/PUA-UTF8-H
% Copyright (C) 2003 Artifex Software. All rights reserved. % % This software is provided AS-IS with no warranty, either express or % implied. % % This software is distributed under license and may not be copied, % modified or distributed except as expressly authorized under the terms % of the license contained in the file LICENSE in this distribution. % % For more information about licensing, please refer to % http://www.ghostscript.com/licensing/. For information on % commercial licensing, go to http://www.artifex.com/licensing/ or % contact Artifex Software, Inc., 101 Lucas Valley Road #110, % San Rafael, CA 94903, U.S.A., +1(415)492-9861. % % $Id$ % PUA-UTF8-H CMap % An identity mapping of UTF8 codes to CIDs. % % ---------------------------------------------------------------------- % This is created on Slackware-14.0 by Masahiko Ito. % This is based on Identity-UTF16-H. % % This is cmap file for Eudc.TTE created in MS-Windows. % I assume Eudc.TTE has font images for PUA(Private User Area : 6400 chars). % Unicode U+E000 - U+F8FF % UTF-8 0xee8080 - 0xefa3bf % CID 57344(0xe000) - 63743(0xf8ff) % % "Masahiko Ito"<m-ito@myh.no-ip.org> % ---------------------------------------------------------------------- % /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry (Artifex) def /Ordering (Unicode) def /Supplement 0 def end def /CMapName /PUA-UTF8-H def /CMapVersion 1.000 def /CMapType 1 def /UIDOffset 0 def % No XUID yet obtained. /WMode 0 def 1 begincodespacerange <EE8080> <EFA3BF> endcodespacerange 100 begincidrange <ee8080> <ee80bf> 57344 <ee8180> <ee81bf> 57408 <ee8280> <ee82bf> 57472 <ee8380> <ee83bf> 57536 <ee8480> <ee84bf> 57600 <ee8580> <ee85bf> 57664 <ee8680> <ee86bf> 57728 <ee8780> <ee87bf> 57792 <ee8880> <ee88bf> 57856 <ee8980> <ee89bf> 57920 <ee8a80> <ee8abf> 57984 <ee8b80> <ee8bbf> 58048 <ee8c80> <ee8cbf> 58112 <ee8d80> <ee8dbf> 58176 <ee8e80> <ee8ebf> 58240 <ee8f80> <ee8fbf> 58304 <ee9080> <ee90bf> 58368 <ee9180> <ee91bf> 58432 <ee9280> <ee92bf> 58496 <ee9380> <ee93bf> 58560 <ee9480> <ee94bf> 58624 <ee9580> <ee95bf> 58688 <ee9680> <ee96bf> 58752 <ee9780> <ee97bf> 58816 <ee9880> <ee98bf> 58880 <ee9980> <ee99bf> 58944 <ee9a80> <ee9abf> 59008 <ee9b80> <ee9bbf> 59072 <ee9c80> <ee9cbf> 59136 <ee9d80> <ee9dbf> 59200 <ee9e80> <ee9ebf> 59264 <ee9f80> <ee9fbf> 59328 <eea080> <eea0bf> 59392 <eea180> <eea1bf> 59456 <eea280> <eea2bf> 59520 <eea380> <eea3bf> 59584 <eea480> <eea4bf> 59648 <eea580> <eea5bf> 59712 <eea680> <eea6bf> 59776 <eea780> <eea7bf> 59840 <eea880> <eea8bf> 59904 <eea980> <eea9bf> 59968 <eeaa80> <eeaabf> 60032 <eeab80> <eeabbf> 60096 <eeac80> <eeacbf> 60160 <eead80> <eeadbf> 60224 <eeae80> <eeaebf> 60288 <eeaf80> <eeafbf> 60352 <eeb080> <eeb0bf> 60416 <eeb180> <eeb1bf> 60480 <eeb280> <eeb2bf> 60544 <eeb380> <eeb3bf> 60608 <eeb480> <eeb4bf> 60672 <eeb580> <eeb5bf> 60736 <eeb680> <eeb6bf> 60800 <eeb780> <eeb7bf> 60864 <eeb880> <eeb8bf> 60928 <eeb980> <eeb9bf> 60992 <eeba80> <eebabf> 61056 <eebb80> <eebbbf> 61120 <eebc80> <eebcbf> 61184 <eebd80> <eebdbf> 61248 <eebe80> <eebebf> 61312 <eebf80> <eebfbf> 61376 <ef8080> <ef80bf> 61440 <ef8180> <ef81bf> 61504 <ef8280> <ef82bf> 61568 <ef8380> <ef83bf> 61632 <ef8480> <ef84bf> 61696 <ef8580> <ef85bf> 61760 <ef8680> <ef86bf> 61824 <ef8780> <ef87bf> 61888 <ef8880> <ef88bf> 61952 <ef8980> <ef89bf> 62016 <ef8a80> <ef8abf> 62080 <ef8b80> <ef8bbf> 62144 <ef8c80> <ef8cbf> 62208 <ef8d80> <ef8dbf> 62272 <ef8e80> <ef8ebf> 62336 <ef8f80> <ef8fbf> 62400 <ef9080> <ef90bf> 62464 <ef9180> <ef91bf> 62528 <ef9280> <ef92bf> 62592 <ef9380> <ef93bf> 62656 <ef9480> <ef94bf> 62720 <ef9580> <ef95bf> 62784 <ef9680> <ef96bf> 62848 <ef9780> <ef97bf> 62912 <ef9880> <ef98bf> 62976 <ef9980> <ef99bf> 63040 <ef9a80> <ef9abf> 63104 <ef9b80> <ef9bbf> 63168 <ef9c80> <ef9cbf> 63232 <ef9d80> <ef9dbf> 63296 <ef9e80> <ef9ebf> 63360 <ef9f80> <ef9fbf> 63424 <efa080> <efa0bf> 63488 <efa180> <efa1bf> 63552 <efa280> <efa2bf> 63616 <efa380> <efa3bf> 63680 endcidrange endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF
_ cidfmapへの追加
/usr/share/ghostscript/9.05/Resource/Init/cidfmapへ以下の行を追加する。
/Eudc << /FileType /TrueType /Path (eudc.ttf) /CSI [(Artifex) (Unicode) 0] >> ;
これで、環境周りの設定は完了!
_ postscriptの記述方法
超テキトウなpsファイルの例。もちろんエンコーディングはUTF-8で。
上記の環境設定で、外字フォントとして、/Eudc-PUA-UTF8-Hが指定できるようになっている。
%!PS-Adobe-3.0 % 描画開始位置への移動 100 100 moveto % 一般的なフォントの指定 /Ryumin-Light-UniJIS-UTF8-H findfont 20 scalefont setfont % 文字列の描画 (外字を含まない文字列) show % 外字フォント(Eudc.TTF)の指定 /Eudc-PUA-UTF8-H findfont 20 scalefont setfont % 外字で出来た文字列の描画 (外字のみの文字列) show showpage
このpsファイルをgsコマンドで表示すれば、外字も含めて正常に表示できるし、もちろん、ps2pdfで作成したPDFファイルも正常に表示される。