JPGRAPH

回覆文章
yehlu
Site Admin
文章: 3245
註冊時間: 2004-04-15 17:20:21
來自: CodeCharge Support Engineer

JPGRAPH

文章 yehlu »

http://blog.yam.com/jaceju/archives/98190.html

如何讓 JpGraph 顯示中文

這篇是我在網路上的好友 chihwen 向我提到的,JpGraph 能否顯示中文?我在和他討論後,找到了方法,便把它記在這裡了。 JpGraph 是一套包裝 GD 函式庫,可用來顯示圖表的 PHP 類別程式。新版 (1.17) 已支援顯示中文,而不必我們手動轉換。

在使用 JpGraph 之前,請先確認安裝了:

* GD2 (繪圖函式庫)
* iconv (字元編碼轉換函式庫)

以上的函式庫在最新版的 PHP5 Win32 版已內建,並請在 PHP.INI 設定好。

將最新版的 JpGraph 下載回來後,找到 src 資料夾,將它更名為 jpgraph ,然後放到 PHP.INI 指定的 include_path 下。

(在原 src 資料夾下有個 Examples 子資料夾,裡面有很多不錯的範例。)

接著在更名後的 jpgraph 資料夾下,找到 jpg-config.inc 檔,修改以下的設定:
DEFINE('CHINESE_TTF_FONT', 'bkai00mp.ttf');

我個人偏好用新細明體,所以我改成:
DEFINE('CHINESE_TTF_FONT', 'mingliu.ttc');

在 Windows 系統上, JpGraph 會自行抓取系統的字型存放路徑,所以基本上不需擔心路徑問題。

然後我們先來看看一個範例 (取自PHP之戀)
<?php include ("jpgraph/jpgraph.php"); include ("jpgraph/jpgraph_pie.php"); include ("jpgraph/jpgraph_pie3d.php"); $data = array(40, 60, 21, 33, 50); $graph = new PieGraph(400, 200); $graph->SetShadow(); $graph->title->SetFont(FF_BIG5, FS_NORMAL); $graph->legend->SetFont(FF_BIG5, FS_NORMAL); $graph->title->Set("中文"); $p1 = new PiePlot3D($data); $p1->SetSize(0.5); $p1->SetCenter(0.45); $p1->SetLegends(array("中文","2","3","4","5")); $graph->Add($p1); $graph->Stroke(); ?>

執行結果如下圖:

重點就是我們只要針對 $graph 裡的屬性值,像是 title 、 legend 等設定 SetFont(FF_BIG5) 或是 SetFont(FF_CHINESE) ,就能正常顯示中文了。

補充

chihwen 發現原本的 Pie3D 所呈現的圖樣顏色 (Legend) 和資料呈現的顏色無法對應,我到官方網站去搜尋的結果,找到了一篇討論:http://jpgraph.intellit.nl/viewtopic.ph ... =pieplot3d

修正方式:

找到 jpgraph_pie.php ,並做以下的修改:

第 229 行,加上 strtolower() 如下:
if( strtolower(get_class($this))==='pieplot3d' ) {

第 236 行,加上 strtolower() 如下:
if( $graph->pieaa && strtolower(get_class($this))==='pieplot' ) {

這是 PHP4 轉 PHP5 未向下相容的問題,因為預設 get_class() 在 PHP4 回傳都會是小寫,但 PHP5 則是大小寫有別所造成。

以上資訊感謝 chihwen 提供~~

Posted by jaceju at 16:31 回應(6) 引用(0)
回blog首頁 上一篇 下一篇
引用URL
http://cgi.blog.roodo.com/trackback/98190
yehlu
Site Admin
文章: 3245
註冊時間: 2004-04-15 17:20:21
來自: CodeCharge Support Engineer

全部的例圖

文章 yehlu »

Examples/testsuit.php
yehlu
Site Admin
文章: 3245
註冊時間: 2004-04-15 17:20:21
來自: CodeCharge Support Engineer

for MDK 10.2

文章 yehlu »

urpmi fonts-ttf-chinese
安裝 fireflysung.ttf

拷貝 windows 的字形至
/usr/share/fonts/ttf/chinese
arialbd.ttf courbd.ttf georgiai.ttf times.ttf verdanab.ttf
ariali.ttf couri.ttf georgia.ttf trebucbd.ttf verdanai.ttf
arial.ttf cour.ttf timesbd.ttf trebucit.ttf verdana.ttf
comicbd.ttf timesbi.ttf trebuc.ttf
comic.ttf georgiab.ttf timesi.ttf VeraBd.ttf


修改jpg-config.inc
//DEFINE('CHINESE_TTF_FONT','bkai00mp.ttf');
DEFINE('CHINESE_TTF_FONT','fireflysung.ttf');

修改jpgraph.php
//DEFINE('TTF_DIR','/usr/X11R6/lib/X11/fonts/truetype/');
DEFINE('TTF_DIR','/usr/share/fonts/ttf/chinese/');
回覆文章

回到「PHP」