mantis 升级到1.2.x后由于图表输出的解决方案发生了变化,除了原来支持的jpGraph图像处理引擎之外,新增了对于Graphviz的支持,并且默认集成了graphviz作为图像处理引擎。并且将相应的图表输出剥离出来,成为了mantis的一个插件。
但是mantis中并未默认开始图表支持,需要在安装配置完成后,以管理员身份登陆系统,在插件(plugins)设置中开启MantisGraph的支持。
默认的MantisGraph对中文的支持并不好,这是由于默认采用的字体并不支持中文字体输出。这需要我们对mantis的代码进行一定的修改后方才可以实现支持中文输出,当然采用jpGraph和Graphviz两种不同的图像处理引擎需要做不同的处理。
由于mantis并未默认集成jpGraph,这里不详细描述如何处理jpGraph的情况。jpGraph的相关支持,可以在网上找到许多的文章。下面详细描述一下关于Graphviz的中文支持处理。
Mantis安装于一台Debian GNU/Linux操作系统中,中文字体文件采用的是开源文泉驿正黑字体,可以通过sudo apt-get install ttf-wqy-zenhei来安装该字体。
MantisGraph插件存放于mantis的plugins/MantisGraph下,重点需要修改的文件为MantisGraph目录下的core/graph_api.php文件,将其中的$t_font = ‘arial.ttf’;修改为$t_font = ‘wqy-zenhei.ttf’;即可。以下为diff文件的内容:
@@ -72,7 +73,7 @@
if( isset( $t_font_map[$t_font] ) ) {
$t_font = $t_font_map[$t_font];
} else {
- $t_font = ‘arial.ttf’;
+ $t_font = ‘wqy-zenhei.ttf’;
}
@@ -82,11 +83,12 @@
可以修改wqy-zenhei.ttf为任意字体文件,实现支持其他语言的输出,例如如果喜欢用simhei或者simson字体,那么则修改为SimHei和SimSun即可。
修改配置完成后发现还是失败,无法正确输出中文。经过仔细查找,发现是mantis的一个处理机制问题。mantis在搜索字体的时候仅仅搜索以下目录:
/usr/share/fonts/corefonts/
/usr/share/fonts/truetype/msttcorefonts/
/usr/share/fonts/msttcorefonts/
/usr/share/fonts/truetype/
然而文泉驿字体则是安装于目录/usr/share/fonts/truetype/wqy/中,并不在该搜索路径中,因此导致无法找到该字体文件。那么则需要修改相应的搜索路径,有如下方法可以修改这个参数:
1、在config_defaults_inc.php或者config_inc.php中设置参数system_font_folder为/usr/share/fonts/truetype/wqy/
2、修改core/utility_api.php文件中的get_font_path()函数,增加搜索路径/usr/share/fonts/truetype/wqy/
但是以上方法仅能支持搜索某一个目录下的文件,并不会搜索子目录或者目录集合下的字体文件。因此应该改进mantis中的搜索字体文件算法,修改为支持搜索子目下的字体文件。比如增加函数:
get_font_file_from_system_path($font)
get_font_file_from_path($path,$font)
这些函数能搜索子目录下的字体文件。
完成以上修改后,mantis可以正常输出中文图表了。