「Java」- 字体配置

  CREATED BY JENKINSBOT

TODO JAVA中的字体配置

系统环境:Debian
其他环境:JAVA 8

字体配置文件的位置

多个 JDK 版本的 fontconfig.properties 配置文件:
1)JDK 8u73/jre/lib/fontconfig.properties.src
2)JDK 8u73/jre/lib/fontconfig.SuSE.10.properties.src

如果你安装的是JRE,那配置文件的位置为:/path/to/jre/lib/fontconfig.properties
如果你使用的是JDK,那配置文件的路径为:/path/to/JDK/jre/lib/fontconfig.properties

有关配置文件的命名方法要注意的问题
fontconfig.properties配置文件的命名存在一定的问题,有些版本的JDK中fontconfig.properties文件无法正常工作,有关该文件的命名参考Font Configuration中的“Loading Font Configuration Files”部分的说明。但是为了方便描述,这里统一称配置文件为fontconfig.properties

生成物理字体的XLFD描述

进入系统字体目录(/usr/share/fonts,或者其他的字体目录)。

执行mkfontscale命令,之后会在字体目录中生成fonts.scale文件,即X逻辑字体描述文件。

声明物理字体

修改 fontconfig.properties 文件,加入:

filename.-microsoft-microsoft_yahei-medium-r-normal--*-%d-*-*-p-*-gb18030.2000-0=/usr/share/fonts/yahei/msyh.ttf

参数说明
1. filename:为固定的,后面跟一个点(.);
2. 紧接着是字体的物理名:-microsoft-microsoft_yahei-medium-r-normal--*-%d-*-*-p-*-gb18030.2000-0
	字体的物理名在fonts.scale文件中是这样表示的:-microsoft-microsoft yahei-medium-r-normal--0-0-0-0-p-0-gb18030.2000-0,但差别就是:

	* 需要用`_‘替换名字中的空格;
	* 并且把--0-0-0-0-p-0-改为--*-%d-*-*-p-*-,其中%d用来表示字体大小,运行时会自动填充这个值。

3. 等号右边是字体的绝对路径。

使用物理字体

allfonts.latin-1=-microsoft-microsoft yahei-medium-r-normal–*-%d-*-*-p-*-gb18030.2000-0

在这里的-microsoft-microsoft yahei-medium-r-normal–*-%d-*-*-p-*-gb18030.2000-0即是声明的物理字体,但是空格不需要使用下划线替换。

配置字体搜索顺序

这也是最重要的部分,修改fontconfig.properties文件,加入:

	sequence.allfonts=**latin-1**

此时,所有的字体都会使用latin-1指向的物理字体。但也可以根据不同的条件加载不同的字体:

	sequence.allfonts.UTF-8.zh.CN=**chinese-cn-iso10646**

这里chinese-cn-iso10646并未定义,以同样的方式定义一下即可。

参考文献

Java程序中文字体配置: http://linux-wiki.cn/wiki/zh-hans/Java%E7%A8%8B%E5%BA%8F%E4%B8%AD%E6%96%87%E5%AD%97%E4%BD%93%E9%85%8D%E7%BD%AE
Java 5/6 中字体的设置、映射原理:http://www.cnblogs.com/super119/archive/2011/01/03/1924534.html
Font Configuration Files: https://docs.oracle.com/javase/8/docs/technotes/guides/intl/fontconfig.html