参考具神http://seisman.info/gmt-chinese-under-linux.html
- 操作系统:ubuntu16.04
- ghostscript:9.18
- GMT:5.4.1
(1)字体拷贝
打开teamviewer,远程文件传输,windows系统 c:/windows/fonts 中拷贝最常用的simsun.ttc
simfang.ttf
simhei.ttf
simkai.ttf
四种中文字体。
到/usr/share/fonts/
目录下。
(2)对 gs 的中文配置文件做如下修改:
-
gs 中文配置文件可以用如下命令安装(默认已安装):
sudo apt-get install poppler-data
- gs 中文配置文件路径为:
/etc/ghostscript/cidfmap.d/90gs-cjk-resource-gb1.conf
-
gs 中文配置文件中默认使用的 Linux 字体为 uming 和 ukai,需要通过如下命令安装:
sudo apt-get install fonts-arphic-uming fonts-arphic-ukai
-
gs 中文配置文件的默认内容为:
/BousungEG-Light-GB <> ; /GBZenKai-Medium <> ; /Song-Medium /GBZenKai-Medium ; /STSong-Light /BousungEG-Light-GB ; /STFangsong-Light /BousungEG-Light-GB ; /STHeiti-Regular /BousungEG-Light-GB ; /STKaiti-Regular /BousungEG-Light-GB ; /Adobe-GB1 /BousungEG-Light-GB ; /Adobe-GB1-Bold /GBZenKai-Medium ;
需要将该文件改成:
% 原配置文件的内容,与 STSong-Light 等相关的四行必须删除 /BousungEG-Light-GB <> ; /GBZenKai-Medium <> ; /Song-Medium /GBZenKai-Medium ; /Adobe-GB1 /BousungEG-Light-GB ; /Adobe-GB1-Bold /GBZenKai-Medium ; % 新增 Windows 字体的支持 /STSong-Light <> ; /STFangsong-Light <> ; /STHeiti-Regular <> ; /STKaiti-Regular <> ;
修改完 gs 中文配置文件后,必须要执行如下命令:
$ sudo update-gsfontmap
该命令会将
/etc/ghostscript/cidfmap.d/*.conf
合并成单独的文件/var/lib/ghostscript/fonts/cidfmap
。gs 在需要中文字体时会读取/var/lib/ghostscript/fonts/cidfmap
而不是/etc/ghostscript/cidfmap.d/*.conf
。这是 Ubuntu/Debian 和 CentOS 的一个很大不同。
(3)测试 gs 对 Linux 默认字体的支持
ghostscript 中文配置文件90gs-cjk-resource-gb1.conf
中,默认有四行,分别定义了四个字体名,尽管本质上这四个 字体名都指向同一个字体。下面先测试一下如何让 gs 显示 Linux 的默认字体。
用编辑器新建一个 PS 文件(是的,PS 文件其中就是纯文本,可以直接用编辑器编辑!),名为 linux_fonts.ps
,其内容为:
%! PS-Adobe-3. 0
/BousungEG-Light-GB--UniGB-UTF8-H findfont 20 scalefont setfont
150 400 moveto
(BousungEG 字体) show
/GBZenKai-Medium--UniGB-UTF8-H findfont 20 scalefont setfont
150 375 moveto
(GBZenKai 字体) show
/MSungGBK-Light--UniGB-UTF8-H findfont 20 scalefont setfont
150 350 moveto
(MSungGBK 字体) show
/Adobe-GB1--UniGB-UTF8-H findfont 20 scalefont setfont
150 325 moveto
(Adobe 字体) show
showpage
%%Trailer
%%EOF
简单解释一下,PS 文件中要使用某个中文字体,需要用 FontName--CMap
的格式来调用。其中 FontName
即 gs 中文配置文件中给定的字体名。CMap 可以取 UniGB-UTF8-H
和 GB-EUC-H
, Linux 下一般用前者,Windows 下一般用后者,应该是用于指定汉字或中文字体的编码,具体原理不知。
用 gs 查看该 PS 文件,正常情况下显示如下图,表明 gs 可以正常显示 Linux 下的默认中文字体。
我的系统中MSungGBK
这个字体乱码,不能正常显示。
(4)测试 gs 对 Windows 中文字体的支持
用编辑器新建一个 PS 文件,名为 windows_fonts.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 已支持 Windows 字体。
到这一步, ghostscript的windows中文字体正常显示
(5)gmt中文配置
修改 GMT 字体配置文件
打开 GMT 字体配置文件 /opt/GMT-5.4.1/share/postscriptlight/PSL_custom_fonts.txt
,在文件显示的注释最后一行#Fontname Fontheight Encoded
后加入 如下语句(以 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 的高度,第三列与编码有关。
查看 GMT 当前支持的字体
用 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 为新添加的中文字体。
使 GMT 支持中文
GMT5 测试脚本:
1
2
3
4
5
6
7
8
9
10
11
|
gmt gmtset FONT_TITLE 40p,35,black
gmt pstext -R0/10/0/3 -JX15c/3c -Bafg -B+t
"GMT中文支持" -F+a+c+f -P > gmt5_cn.ps << EOF
3 2.1 0 LM 35p,35,red GMT宋体
3 0.9 0 LM 35p,36,blue GMT仿宋
7 2.1 0 LM 35p,37,black GMT黑体
7 0.9 0 LM 35p,38,green GMT楷体
EOF
rm gmt.*
|
中文显示成功。