對這文章發表回應
發表限制: 非會員 可以發表
- 測試 GD 的中文支援性
- 確定 PHP、GD中文運作正常
Header( "Content-type: image/gif" );
$im = imagecreate( 400, 150 );
$black = ImageColorAllocate( $im, 0, 0, 0 );
$white = ImageColorAllocate( $im, 255, 255, 255 );
$fnt = "/usr/share/fonts/corefonts/fireflysung.ttf";
$str = iconv("BIG5","UTF-8","中文");
ImageTTFText($im, 30, 0, 50,50, $white, $fnt, $str);
ImageGif($im);
ImageDestroy($im);
?>如果這裡沒問題,代表 PHP、GD 沒問題了~
- 確定 PHP、GD中文運作正常
- jpgraph
- 更新 dotproject/lib/jpgraph
到官方網站更新至新版:
http://www.aditus.nu/jpgraph/ - 修改 jpg-config.inc.php 設定,加入中文字型
- 加入 DEFINE("TTF_DIR"," /usr/share/fonts/corefonts/");
- 將 DEFINE('CHINESE_TTF_FONT','bkai00mp.ttf');
改為 DEFINE('CHINESE_TTF_FONT',' fireflysung.ttf');
- 修改 jpgraph.php
- 取消內建的 UTF-8 轉碼
由於本來就是使用UTF-8,所以要把內部的自動轉換關閉。
搜尋「iconv」,找到elseif( $aFF === FF_CHINESE ) {
if( !function_exists('iconv') ) {
JpGraphError::RaiseL(25006);
//('Usage of FF_CHINESE (FF_BIG5) font family requires that your PHP setup has the iconv() function. By de$
}
return iconv('BIG5','UTF-8',$aTxt);
)修改為
elseif( $aFF === FF_CHINESE ) {
return $aTxt;
} - 修改字型對應
找到
FF_CHINESE => array(FS_NORMAL=>CHINESE_TTF_FONT, FS_BOLD=>'', FS_ITALIC=>'', FS_BOLDITALIC=>''),
修改成
FF_CHINESE => array(FS_NORMAL=>CHINESE_TTF_FONT, FS_BOLD=>CHINESE_TTF_FONT, FS_ITALIC=>CHINESE_TTF_FONT, FS_BOLDITALIC=>CHINESE_TTF_FONT ),
如果要設定粗體、斜體為不同字型,要另外設定別的字型檔給 FS_BOLD、FS_ITALIC。
- 加入區域偵測
應該是用來設定日期的格式的,原則上應該是要給正確的值給他,但是寫在這比較方便。
找到 function Set($aLocale),在下方加入$query = "SELECT 'config_value' FROM 'config' WHERE 'config_name = host_locale'";
$aLocale = mysql_query ($query);
- 取消內建的 UTF-8 轉碼
- 測試設定:
include ("../jpgraph.php");
include ("../jpgraph_gantt.php");
$bar1 = new GanttBar(0, iconv("BIG5","UTF8","中文 1"),"2001-12-21","2002-01-20");
$bar1->SetCSIMTarget('#','Go back 1');
$bar1->title->SetCSIMTarget('#','Go back 1 (title)');
$bar1->title->SetFont( FF_CHINESE, FS_NORMAL, 8 );
$bar2 = new GanttBar(1,"Activity 2","2002-01-03","2002-01-25");
$bar2->SetCSIMTarget('#','Go back 2');
$bar2->title->SetCSIMTarget('#','Go back 2 (title)');
$graph = new GanttGraph(500);
$graph->title->Set("Example with image map");
$graph->ShowHeaders(GANTT_HYEAR | GANTT_HMONTH | GANTT_HDAY | GANTT_HWEEK);
$graph->scale->week->SetStyle(WEEKSTYLE_FIRSTDAY);
$graph->scale->week->SetFont(FF_FONT1);
$graph->Add(array($bar1,$bar2));
// And stroke
$graph->StrokeCSIM('ganttcsimex01.php');
?>如果這裡沒問題,應該代表 jpgraph 的設定沒問題。
- 更新 dotproject/lib/jpgraph
- dotProject
- 修改 dotproject/modules/projects/gantt.php
- 取消內建的 UTF-8 轉碼
由於本來就是使用UTF-8,所以要把內部的自動轉換關閉。
找到
if ( $locale_char_set=='utf-8' && function_exists("utf8_decode") ) {
$name = strlen( utf8_decode($p["project_name"]) ) > 25 ? substr( utf8_decode($p["project_name"]), 0, 22 ).'...' : utf8_decode($p["project_name"]) ;
} else {
//while using charset different than UTF-8 we need not to use utf8_deocde
$name = strlen( $p["project_name"] ) > 25 ? substr( $p["project_name"], 0, 22 ).'...' : $p["project_name"] ;
}改成
$name = strlen( $p["project_name"] ) > 25 ? substr( $p["project_name"], 0, 22 ).'...' : $p["project_name"] ;
- 修改字型設定
- 找到 //$graph->scale->actinfo->SetFont(FF_ARIAL);
改為 $graph->scale->actinfo->SetFont(FF_CHINESE); - 找到
// Use TTF font if it exists
// try commenting out the following two lines if gantt charts do not display
if (is_file( TTF_DIR."arialbd.ttf" ))
$graph->scale->tableTitle->SetFont(FF_ARIAL,FS_BOLD,12);修改為 $graph->scale->tableTitle->SetFont(FF_CHINESE,FS_BOLD,12);
- 找到
$bar->title->SetCOlor('red');
$graph->Add($bar);加入一行,變成
$bar->title->SetCOlor('red');
$bar->title->SetFont(FF_CHINESE,FS_BOLD,8);
$graph->Add($bar); - 找到 $bar->title->SetFont(FF_FONT1,FS_NORMAL,10);
改為 $bar->title->SetFont(FF_CHINESE,FS_NORMAL,10); - 找到
$bar->caption = new TextProperty($caption);
在之後加入 $bar->caption->SetFont(FF_CHINESE,FS_NORMAL,10); - 找到 $graph->Add($bar2);
共兩處,在前面加上 $bar2->title->SetFont(FF_CHINESE,FS_NORMAL,10); - 找到 $graph->Add($bar3);
在前面加上 $bar3->title->SetFont(FF_CHINESE,FS_NORMAL,10); - 找到 $graph->Add($vline);
在前面加上 $vline->title->SetFont(FF_CHINESE,FS_BOLD,8);
- 找到 //$graph->scale->actinfo->SetFont(FF_ARIAL);
- 取消內建的 UTF-8 轉碼
- 修改 dotproject/modules/tasks/gantt.php
- 取消內建的UTF-8轉碼
由於本來就是使用UTF-8,所以要把內部的自動轉換關閉。
找到
if( $local_char_set==』 utf-8' && function_exists('utf8_decode') ) {
$name = utf8_decode($name);
}把這三行刪除。
- 修改字型設定:
- 找到
if (is_file( TTF_DIR.'arialbd.ttf' )){
$graph->scale->actinfo->SetFont(FF_ARIAL);
}修改為 $graph->scale->actinfo->SetFont(FF_CHINESE);
- 找到
// Use TTF font if it exists
// try commenting out the following two lines if gantt charts do not display
if (is_file( TTF_DIR.'arialbd.ttf' ))
$graph->scale->tableTitle->SetFont(FF_ARIAL,FS_BOLD,12);修改為 $graph->scale->tableTitle->SetFont(FF_CHINESE,FS_BOLD,12);
- 找到 $graph->Add($bar);
共兩處,在前面加上
$bar->title->SetFont(FF_CHINESE,FS_NORMAL,10); - 找到
if (is_file( TTF_DIR.'arialbd.ttf' )) {
$vline->title->SetFont(FF_ARIAL,FS_BOLD,10);
}修改為 $vline->title->SetFont(FF_CHINESE,FS_BOLD,8);
- 找到
- 取消內建的UTF-8轉碼
- 修改 dotproject/modules/projects/gantt.php
雖然我是用在mantis,不過問題總算是解決了~~~原來是utf-8的問題。
原文出處:kaowoei的自爽地: dotProject 的甘特圖中文修改