原生GMT是不支持中文的,想要让GMT支持中文,需要进行一番配置。想要理解整个问题,需要对PostScript、CID字体有更深刻的理解,这未免有些过于复杂。所以这篇博文只介绍一些基本的原理,不一定准确但是却够用。
修改配置这个事情本身不难,,麻烦的是不同的发行版对ghostscript的打包方式不同,不同的ghostscript版本之间也会有一些差异。这里列出我在使用的系统信息,对于其他发行版以及gs版本,也有一些参考意义。
准备工作
安装gs
对于大多数发行版而言,gs都是默认安装的。相关的文件位于/usr/share/ghostscript目录下。除此之外,还需要安装简体中文配置文件。
不同的发行版中,中文配置文件所在的包是不同的:
CentOS7:
$ sudo yum install ghostscript-chinese-zh_CN
CentOS6:
$ sudo yum install cjkuni-fonts-ghostscript
Ubuntu14.04:
$ sudo apt-get install poppler-data
Ubuntu12.04:
$ sudo apt-get install gs-cjk-resource
安装完相应的包之后,中文配置文件所在的目录也不同,下面统称为conf.d 目录:
CentOS 6、7:/usr/share/ghostscript/conf.dUbuntu 12.04、14.04: /etc/ghostscript/cidfmap.d/90gs-cjk-resource-gb1.conf
安装GMT
这步就不用再多说了。安装后的GMT位于/opt/GMT-4.5.12,其中与字体有关的文件为/opt/GMT-4.5.12/share/pslib/PS_font_info.d。
使gs支持中文
下文的说明中,所有路径以CentOS发行版为准。
cidfmap
进入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
CMap位于/usr/share/ghostscript/9.07/Resource/CMap目录下,可以看到其中有很多文件,CMap文件的具体含义不知。暂且留在这里。只需要知道有UniGB-UTF8-H和GB-EUC-H这两个CMap即可。
测试gs对中文字体的支持
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 setfont150 400 moveto(Song Typeface 宋体) show/STFangsong-Light–UniGB-UTF8-H findfont 20 scalefont setfont150 375 moveto(Fangsong Typeface 仿宋体) show/STHeiti-Regular–UniGB-UTF8-H findfont 20 scalefont setfont150 350 moveto(Hei Typeface 黑体) show/STKaiti-Regular–UniGB-UTF8-H findfont 20 scalefont setfont150 325 moveto(Kai Typeface 楷体) showshowpage%%Trailer%%EOF
用gs查看该PS文件,若正确显示中文如下图,则表明gs的中文配置没有问题。
需要说明如下几点:
这里仅仅以Windows字体为例,对于其他中文甚至日韩字体来说,方法类似;PS文件中的中文字体为CIDFont–CMap,这里CMap选择的是UniGB-UTF8-H,在Windows下似乎应该选择GB-EUC-H,尚不清楚原理;
使GMT支持中文
修改配置文件
打开GMT中文配置文件/opt/GMT-4.5.12/share/pslib/PS_font_info.d,在文件最后加入如下语句(以Windows字体为例):
STSong-Light–UniGB-UTF8-H 0.700 1STFangsong-Light–UniGB-UTF8-H 0.700 1STHeiti-Regular–UniGB-UTF8-H 0.700 1STKaiti-Regular–UniGB-UTF8-H 0.700 1
第一列为字体名,第二列为字母A的高度,第三列与编码有关。
查看GMT当前支持的字体
用pstext -L命令查看GMT当前的字体配置:
1 2 3 4 5 6 7 8 910111213
$ pstext -LFont # Font Name————————————0 Helvetica1 Helvetica-Bold… ……32 Palatino-BoldItalic33 ZapfChancery-MediumItalic34 ZapfDingbats35 STSong-Light–UniGB-UTF8-H36 STFangsong-Light–UniGB-UTF8-H37 STHeiti-Regular–UniGB-UTF8-H38 STKaiti-Regular–UniGB-UTF8-H
其中0-34为GMT/gs默认支持的西文字体,35至38为新添加的中文字体。
GMT中文测试
GMT4测试脚本:
1 2 3 4 5 6 7 8 91011
#!/bin/bashgmtset HEADER_FONT 35pstext -R0/7/0/7 -JX6i/6i -B1/1:.rm .gmt*
成图效果如下
GMT5测试脚本:
1 2 3 4 5 6 7 8 91011
#!/bin/bashgmt gmtset FONT_TITLE 40p,35,blackgmt pstext -R0/7/0/7 -JX6i/6i -Bafg -B+trm gmt.*
成图效果如下
可移植性的一些测试
由于目前无其他机器可用,因而暂时不测试可移植性。
本文永久更新链接地址:
行动是治愈恐惧的良药,而犹豫、拖延将不断滋养恐惧。