歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux下的GMT中文支持

Linux下的GMT中文支持

日期:2017/2/28 13:59:45   编辑:Linux教程

原生GMT是不支持中文的,想要讓GMT支持中文,需要進行一番配置。想要理解整個問題,需要對PostScript、CID字體有更深刻的理解,這未免有些過於復雜。所以這篇博文只介紹一些基本的原理,不一定准確但是卻夠用。

修改配置這個事情本身不難,麻煩的是不同的發行版對ghostscript的打包方式不同,不同的ghostscript版本之間也會有一些差異。這裡列出我在使用的系統信息,對於其他發行版以及gs版本,也有一些參考意義。

  • 操作系統:CentOS 7.0
  • ghostscript:9.07
  • GMT:4.5.12或5.1.1(以4.5.12為例)

准備工作

安裝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 目錄:

  • CentOS 6、7:/usr/share/ghostscript/conf.d
  • Ubuntu 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_CNFAPIcidfmap.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)如下:

  • 第一行定義了字體名為/BousungEG-Light-GB,對應的字體文件為/usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc,也就是文泉驿正黑;
  • 第二行定義了字體名為/GBZenKai-Medium,對應的字體文件也是文泉驿正黑;
  • 第三行和第四行分別定義了字體名/MSungGBK-Light/Adobe-GB1,這兩種都對應於/BousungEG-Light-GB,相當於給字體定義了別名。

關於這個文件需要說的幾點是:

  • 字體名是任意的,比如可以把字體名取為/ABC
  • 字體文件似乎只能是ttcttf格式的,當然修改參數也有可能可以使用其他格式的字體;
  • 由於Linux下中文字體並不統一,所以要注意檢查配置文件中的字體文件路徑是否正確;

CMap

CMap位於/usr/share/ghostscript/9.07/Resource/CMap目錄下,可以看到其中有很多文件,CMap文件的具體含義不知。暫且留在這裡。只需要知道有UniGB-UTF8-HGB-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 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字體為例,對於其他中文甚至日韓字體來說,方法類似;
  • 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    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中文測試

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.*

成圖效果如下

可移植性的一些測試

  • 本機:用vi打開PS文件,中文正常顯示;
  • 本機:gs查看正常;
  • 本機:ps2raster轉換為PDF,用evince、zathura查看正常;
  • 本機:ps2pdf轉換為PDF,用evince、zathura查看正常;

由於目前無其他機器可用,因而暫時不測試可移植性。

Copyright © Linux教程網 All Rights Reserved