呵呵,好久没有写技术文章了。今天开始恢复吧。
从星期开始这一个月我的任务是修改 dotProject 以适应公司的应用,哈哈,可以正大光明的玩偶最喜欢的 PHP 了,开心啊。
第一个任务就是修改里面项目甘特图中中文乱码的问题。
原始的效果如下:

其中的乱码应该是“测试任务”
明显的 PHP 的 GD 库对中文支持的 bug,呵呵。上网搜索解决方法,在一个台湾网站上找到解决方法,根据和中文版的对应,修改方法如下:
- 找到 Linux 下存放字体的路径,我的系统是 /usr/X11R6/lib/X11/fonts/,然后找到 c:\window\fonts\,拷贝 sinsum.ttc 到这个目录下并且改名为 simsun.ttf。
- 修改 dotProject/lib/jpgraph/src/jpgraph.php。
L 27,把原来的
DEFINE("TTF_DIR",
"/usr/X11R6/lib/X11/fonts/truetype/");
修改为
DEFINE("TTF_DIR",
"/usr/X11R6/lib/X11/fonts/");
L176,在 后面增加一行
L1786,
function TTF() {
$this->
style_names=
array(FS_NORMAL=>
'normal', FS_BOLD=>
'bold', FS_ITALIC=>
'italic', FS_BOLDITALIC=>
'bolditalic');
// File names for available fonts
FF_COURIER =>
array(FS_NORMAL=>
'cour', FS_BOLD=>
'courbd', FS_ITALIC=>
'couri', FS_BOLDITALIC=>
'courbi' ),
FF_GEORGIA =>
array(FS_NORMAL=>
'georgia', FS_BOLD=>
'georgiab', FS_ITALIC=>
'georgiai', FS_BOLDITALIC=>
'' ),
FF_TREBUCHE =>
array(FS_NORMAL=>
'trebuc', FS_BOLD=>
'trebucbd', FS_ITALIC=>
'trebucit', FS_BOLDITALIC=>
'trebucbi' ),
FF_VERDANA =>
array(FS_NORMAL=>
'verdana', FS_BOLD=>
'verdanab', FS_ITALIC=>
'verdanai', FS_BOLDITALIC=>
'' ),
FF_TIMES =>
array(FS_NORMAL=>
'times', FS_BOLD=>
'timesbd', FS_ITALIC=>
'timesi', FS_BOLDITALIC=>
'timesbi' ),
FF_COMIC =>
array(FS_NORMAL=>
'comic', FS_BOLD=>
'comicbd', FS_ITALIC=>
'', FS_BOLDITALIC=>
'' ),
FF_ARIAL =>
array(FS_NORMAL=>
'arial', FS_BOLD=>
'arialbd', FS_ITALIC=>
'ariali', FS_BOLDITALIC=>
'arialbi' ) );
}
修改为
function TTF() {
$this->
style_names=
array(FS_NORMAL=>
'normal', FS_BOLD=>
'bold', FS_ITALIC=>
'italic', FS_BOLDITALIC=>
'bolditalic');
// File names for available fonts
FF_COURIER =>
array(FS_NORMAL=>
'cour', FS_BOLD=>
'courbd', FS_ITALIC=>
'couri', FS_BOLDITALIC=>
'courbi' ),
FF_GEORGIA =>
array(FS_NORMAL=>
'georgia', FS_BOLD=>
'georgiab', FS_ITALIC=>
'georgiai', FS_BOLDITALIC=>
'' ),
FF_TREBUCHE =>array(FS_NORMAL=>'trebuc', FS_BOLD=>'trebucbd', FS_ITALIC=>'trebucit', FS_BOLDITALIC=>'trebucbi' ),
FF_VERDANA =>
array(FS_NORMAL=>
'verdana', FS_BOLD=>
'verdanab', FS_ITALIC=>
'verdanai', FS_BOLDITALIC=>
'' ),
FF_TIMES =>
array(FS_NORMAL=>
'times', FS_BOLD=>
'timesbd', FS_ITALIC=>
'timesi', FS_BOLDITALIC=>
'timesbi' ),
FF_COMIC =>
array(FS_NORMAL=>
'comic', FS_BOLD=>
'comicbd', FS_ITALIC=>
'', FS_BOLDITALIC=>
'' ),
FF_ARIAL =>
array(FS_NORMAL=>
'arial', FS_BOLD=>
'arialbd', FS_ITALIC=>
'ariali', FS_BOLDITALIC=>
'arialbi' ),
FF_SIMSUN =>
array(FS_NORMAL=>
'simsun', FS_BOLD=>
'simsun', FS_ITALIC=>
'simsun', FS_BOLDITALIC=>
'simsun' ) );
}
- 修改 dotProject/lib/jpgraph/src/jpgraph_gantt.php。
L413,把 var $iFFamily=FF_FONT1,$iFStyle=FS_NORMAL,$iFSize=10;
修改为
var $iFFamily=FF_SIMSUN,$iFStyle=FS_NORMAL,$iFSize=10;
L429,把 $this->iText = $aTxt;
修改为 $this->
iText =
iconv("GB2312",
"UTF-8",
$aTxt);
- 修改 dotProject/modules/tasks/gantt.php。
L201,把 修改为
$name =
strlen( $a["task_name"] ) >
25 ?
substr( $a["task_name"],
0,
22 ).
'...' :
$a["task_name"] ;
完成,刷新页面,结果如下:

一切OK。
开始看了那些大陆的帖子,都是讲在 Windows 下怎么处理的,只要把 FF_FONT 相关改成 FF_SIMSUN 就行了,那些台湾的帖子,
只说到第 3 步就说 OK 了,后来想想,估计他们用的都是 big5 编码的关系。我们都是 GB2312。
然后再一个俄文站点上找到第4步的修改方法,成功~
哈哈