解决dotproject的甘特图乱码问题

类别:编程语言 点击:0 评论:0 推荐:
 我主要把dotproject这个软件当做项目的动态信息跟踪管理,相当不错的项目管理软件,而且时开源的。和同是开源项目的xplanner比较后,选择它,因为dotproject更加全面。安装在Redhat9上,用php+apache+mysql。
 
 dotproject有比较不错的多语言包,项目叫dot modules,在sourceforge上有。对中文的支持也不错,很方便。但是,很烦人的问题是项目甘特图的中文部分总是乱码。现在总算解决了。
 
 dotproject版本是1.0.2。我从sourceforge的cvs下载了dotproject的最新版本,是2.0 alpha,但发现这个版本虽然又增加了功能,但的确不稳定。2.0alpha中,图形部分已经加入了对中文的处理,简体和繁体都有。但如果把2.0alpha的图形部分放入1.0.2,甘特图显示出不来。没办法,只好在1.0.2上一点点手动修改。已经修改好的文件在此文的末尾。
 
 dotproject的图形模块使用了jpgraph。问题的核心在于jpgraph中没有加入中文处理。
 
 先修改lib/jpgraph/src/jpgraph.php文件。
 
 1.把jpgraph_gb2312.php文件中的内容,加入到这个文件末尾,使jpgraph.php中有GB2312toUTF8这个对象。
 2.然后修改LanguageConv对象,增加function Convert($aTxt,$aFF)函数。
 3.增加FF_SIMSUN变量:DEFINE("FF_SIMSUN",18)
 4.在TTF对象的构造器中,增加FF_SIMSUN的定义:
 FF_SIMSUN =>  array(FS_NORMAL=>'simsun',  FS_BOLD=>'simhei',   FS_ITALIC=>'',   FS_BOLDITALIC=>'' )
 5.修改DateLocale对象中Set($aLocale)函数,因为这个函数中返回日的时候只取第一个值,在中文转换时会出错,要把:
 $this->iDayAbb[$aLocale][]= $day{0}
 改为
 $this->iDayAbb[$aLocale][]= $day
 6.读取字体的目录不正确,要改为:DEFINE("TTF_DIR","/usr/X11R6/lib/X11/fonts/TTF/")
 
 修改lib/jpgraph/src/jpgraph_gantt.php文件。
 年月日都是TextProperty对象,调用其中的SetFont方法,把它们的字体改为中文,如:$this->day->SetFont(FF_SIMSUN,FS_NORMAL);
 
 还要修改modules/tasks/gantt.php文件。
 这个文件中的问题在于,取任务名称的时候,事先把数据库取出的值转码,这样当jpgraph再次转码的时候,会出现错误。所以,要把:$name = strlen( utf8_decode($a["task_name"]) ) > 25 ? substr( utf8_decode($a["task_name"]), 0, 22 ).'...' : utf8_decode($a["task_name"])
 改为:
 $name = strlen( $a["task_name"] ) > 25 ? substr( $a["task_name"], 0, 22 ).'...' : $a["task_name"] ; 
 
 现在,甘特图显示没问题了
 

 上文的三个文件(已经被改好的):
附件 dotproject_102_rev.zip:http://blog.blogchina.com/upload/2005-03-01/20050301145023466505.zip
(若无法下载,到http://wilsonsun.blogchina.com/blog/article_81040.999174.html)

本文地址:http://com.8s8s.com/it/it23150.htm