2011年6月26日 星期日

如何在JPGraph的圖表中顯示中文

這邊介紹的方法不用去修改到JPGraph的source!
1.首先,PHP必須存成utf-8 no bom的格式,為什麼?因為JPGraph會使用你指定的中文字型檔來畫出你想秀出的中文字,但是它在對應字型時使用的是utf-8的編碼,所以你要是存成Big5,那就永遠畫不出正確的中文字囉!
2.將中文字型檔複製到跟你的程式相同的資料夾中。這樣做的好處是將來搬移主機時,可以無痛轉移(虛擬主機環境中特別建議這樣,因為字型檔的預設路徑可能不同或無存取權限)。
3.在require跟JPGraph有關的所有php檔前,先定義TTF_DIR及CHINESE_TTF_FONT這兩個常數,記住一定要定義在跟JPGraph有關的所有php檔前面,因為PHP是不允許redefine的,所以我們要先搶先贏。我們用一個3D圓餅圖作為範例:
<?php
define('TTF_DIR', './');
//字型檔的路徑,因為我們將字型檔放在同一資料夾,所以此處給空字串。
//經測試在某些linux主機上使用空字串不能正確讀到同一資料夾的字型檔(2011/06/28修正)
//字型檔的路徑,因為我們將字型檔放在同一資料夾,所以此處給"./",表示當前路徑。
//若是你想使用作業系統的字型檔路徑中的字型檔,這一行可以省略。
define('CHINESE_TTF_FONT','mingliu.ttc');
//使用細明體(mingliu.ttc),注意,若是在linux主機大小寫必須完全相符。
require_once ('../jpgraph/jpgraph.php');
require_once ('../jpgraph/jpgraph_pie.php');
require_once ('../jpgraph/jpgraph_pie3d.php');
// Some data
$data = array(40,60,21,33);
// Create the Pie Graph.
$graph = new PieGraph(350,250);
$theme_class= new VividTheme;
$graph->SetTheme($theme_class);
$graph->title->SetFont(FF_CHINESE, FS_NORMAL);
$graph->xaxis->SetFont(FF_CHINESE, FS_NORMAL);
$graph->yaxis->SetFont(FF_CHINESE, FS_NORMAL);
$graph->legend->SetFont(FF_CHINESE, FS_NORMAL);
$graph->subtitle->SetFont(FF_CHINESE, FS_NORMAL);
$graph->subsubtitle->SetFont(FF_CHINESE, FS_NORMAL);
$graph->tabtitle->SetFont(FF_CHINESE, FS_NORMAL);

//設定title使用中文顯示,注意,要是要在其他部份顯示中文,要去使用相對應的SetFont!
//2011/06/30:稍微看了一下他的文件,以上設定應該可以讓所有顯示字的地方都顯示中文
//若有不能的麻煩告知,我會再更正!
// Set A title for the plot
$graph->title->Set("一個簡易的3D圓餅圖");
// Create
$p1 = new PiePlot3D($data);
$graph->Add($p1);
$p1->ShowBorder();
$p1->SetColor('black');
$p1->ExplodeSlice(1);
$graph->Stroke();
?>
最後補充一下,標題雖然說是如何顯示中文,但是當然不侷限於中文,你也可以用別的語言的字型檔來試試囉!我相信一樣會成功的。

2 則留言:

  1. 謝謝你的教學喔!
    我發現可能真的是台灣的關係,要用新細明體或細明體Orz因為我用標楷體或一般的Arial,就無法顯示@@
    但是用mingliu.ttc就可以了~
    不過也可能是因為我不是真的中文的關係(其實是要顯示日文,但是直接用改變輸入法輸入)
    運作正常!成功XDDDD

    回覆刪除
    回覆
    1. 雖然我沒有完全看懂你的意思,但是仍然恭喜你成功~~

      刪除