原生GMT是不支持中文的,想要讓GMT支持中文,需要進行一番配置。想要理解整個問題,需要對PostScript、CID字體有更深刻的理解,這未免有些過於復雜。所以這篇博文只介紹一些基本的原理,不一定准確但是卻夠用。
修改配置這個事情本身不難,麻煩的是不同的發行版對ghostscript的打包方式不同,不同的ghostscript版本之間也會有一些差異。這裡列出我在使用的系統信息,對於其他發行版以及gs版本,也有一些參考意義。
對於大多數發行版而言,gs都是默認安裝的。相關的文件位於/usr/share/ghostscript目錄下。除此之外,還需要安裝簡體中文配置文件。
不同的發行版中,中文配置文件所在的包是不同的:
CentOS 7:
$ sudo yum install ghostscript-chinese-zh_CN
CentOS 6:
$ sudo yum install cjkuni-fonts-ghostscript
Ubuntu 14.04:
$ sudo apt-get install poppler-data
Ubuntu 12.04:
$ sudo apt-get install gs-cjk-resource
安裝完相應的包之後,中文配置文件所在的目錄也不同,下面統稱為conf.d 目錄:
這步就不用再多說了。安裝後的GMT位於/opt/GMT-4.5.12,其中與字體有關的文件為/opt/GMT-4.5.12/share/pslib/PS_font_info.d。
下文的說明中,所有路徑以CentOS發行版為准。
進入conf.d目錄下,有文件cidfmap.zh_CN(該目錄下還有CIDFnmap.zh_CN和FAPIcidfmap.zh_CN,不管) ,其內容為:
/BousungEG-Light-GB << /FileType /TrueType /Path (/usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc) /SubfontId 0 /CSI [(GB1) 4] >> ; /GBZenKai-Medium << /FileType /TrueType /Path (/usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc) /SubfontId 0 /CSI [(GB1) 4] >> ; /MSungGBK-Light /BousungEG-Light-GB ; /Adobe-GB1 /BousungEG-Light-GB ;
其中的細節可能看不懂,但是可以大概總(xia)結(cai)如下:
關於這個文件需要說的幾點是:
CMap位於/usr/share/ghostscript/9.07/Resource/CMap目錄下,可以看到其中有很多文件,CMap文件的具體含義不知。暫且留在這裡。只需要知道有UniGB-UTF8-H和GB-EUC-H這兩個CMap即可。
Linux的中文字體比較少,可能很多人都會將Windows下的中文字體復制到Linux下使用。假設已經將Windows下的中文字體復制到/usr/share/fonts/winfonts/目錄下,對gs的配置文件cidfmap.zh_CN做一些修改,使gs在Linux下可以使用Windows中文字體:
% cidfmap.zh_CN的原內容保持不變 /BousungEG-Light-GB << /FileType /TrueType /Path (/usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc) /SubfontId 0 /CSI [(GB1) 4] >> ; /GBZenKai-Medium << /FileType /TrueType /Path (/usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc) /SubfontId 0 /CSI [(GB1) 4] >> ; /MSungGBK-Light /BousungEG-Light-GB ; /Adobe-GB1 /BousungEG-Light-GB ; % 新增Windows字體的支持 /STSong-Light << /FileType /TrueType /Path (/usr/share/fonts/winfonts/simsun.ttc) /SubfontId 0 /CSI [(GB1) 4] >> ; /STFangsong-Light << /FileType /TrueType /Path (/usr/share/fonts/winfonts/simfang.ttf) /SubfontId 0 /CSI [(GB1) 4] >> ; /STHeiti-Regular << /FileType /TrueType /Path (/usr/share/fonts/winfonts/simhei.ttf) /SubfontId 0 /CSI [(GB1) 4] >> ; /STKaiti-Regular << /FileType /TrueType /Path (/usr/share/fonts/winfonts/simkai.ttf) /SubfontId 0 /CSI [(GB1) 4] >> ;
用編輯器新建一個PS文件(是的,PS文件其中就是純文本,可以直接用編輯器編輯!),名為gs_test.ps,其內容為:
%! PS-Adobe-3. 0 /STSong-Light--UniGB-UTF8-H findfont 20 scalefont setfont 150 400 moveto (Song Typeface 宋體) show /STFangsong-Light--UniGB-UTF8-H findfont 20 scalefont setfont 150 375 moveto (Fangsong Typeface 仿宋體) show /STHeiti-Regular--UniGB-UTF8-H findfont 20 scalefont setfont 150 350 moveto (Hei Typeface 黑體) show /STKaiti-Regular--UniGB-UTF8-H findfont 20 scalefont setfont 150 325 moveto (Kai Typeface 楷體) show showpage %%Trailer %%EOF
用gs查看該PS文件,若正確顯示中文如下圖,則表明gs的中文配置沒有問題。
需要說明如下幾點:
打開GMT中文配置文件/opt/GMT-4.5.12/share/pslib/PS_font_info.d,在文件最後加入如下語句(以Windows字體為例):
STSong-Light--UniGB-UTF8-H 0.700 1 STFangsong-Light--UniGB-UTF8-H 0.700 1 STHeiti-Regular--UniGB-UTF8-H 0.700 1 STKaiti-Regular--UniGB-UTF8-H 0.700 1
第一列為字體名,第二列為字母A的高度,第三列與編碼有關。
用pstext -L命令查看GMT當前的字體配置:
1 2 3 4 5 6 7 8 9 10 11 12 13
$ pstext -L Font # Font Name ------------------------------------ 0 Helvetica 1 Helvetica-Bold ... ...... 32 Palatino-BoldItalic 33 ZapfChancery-MediumItalic 34 ZapfDingbats 35 STSong-Light--UniGB-UTF8-H 36 STFangsong-Light--UniGB-UTF8-H 37 STHeiti-Regular--UniGB-UTF8-H 38 STKaiti-Regular--UniGB-UTF8-H
其中0-34為GMT/gs默認支持的西文字體,35至38為新添加的中文字體。
GMT4測試腳本:
1 2 3 4 5 6 7 8 9 10 11
#!/bin/bash gmtset HEADER_FONT 35 pstext -R0/7/0/7 -JX6i/6i -B1/1:."GMT中文支持": -P > cn.ps <<EOF 1.5 5 35 0 35 LM GMT宋體 1.5 4 35 0 36 LM GMT仿宋 1.5 3 35 0 37 LM GMT黑體 1.5 2 35 0 38 LM GMT楷體 EOF rm .gmt*
成圖效果如下
GMT5測試腳本:
1 2 3 4 5 6 7 8 9 10 11
#!/bin/bash gmt gmtset FONT_TITLE 40p,35,black gmt pstext -R0/7/0/7 -JX6i/6i -Bafg -B+t"GMT中文支持" -F+a+c+f -P > gmt5_cn.ps << EOF 3.5 5 0 LM 45p,35,red GMT宋體 3.5 4 0 LM 45p,36,blue GMT仿宋 3.5 3 0 LM 45p,37,black GMT黑體 3.5 2 0 LM 45p,38,green GMT楷體 EOF rm gmt.*
成圖效果如下
由於目前無其他機器可用,因而暫時不測試可移植性。