很久以前的一篇文章…庫存一下…
官方網站 http://www.aditus.nu/jpgraph/
使用2.2版 官方連結 http://hem.bredband.net/jpgraph2/jpgraph-2.2.tar.gz
src/jpgraph.php 內
6256行左右有 $txt = $this->langconv->Convert($txt,$this->font_family);
似乎是將簡體中文轉成 utf-8 而我網站內使用的是 utf-8 而且我用的是繁體中文,所以註解掉這行。
63行部份有定義字型的位置,我網站內使用的是Linux 而我又不是伺服器管理者動不到原先字型的目錄,所以將字型之置換於 jpgraph 安裝目錄下所以改成這樣。
if (!defined('TTF_DIR')) { if (strstr( PHP_OS, 'WIN') ) { $sroot = getenv('SystemRoot'); if( empty($sroot) ) { $t = new ErrMsgText(); $msg = $t->Get(12,$file,$lineno); die($msg); } else { DEFINE('TTF_DIR', $sroot.'/fonts/'); //windows下的位置 } } else { DEFINE('TTF_DIR','/home/mlwmlw/www/jpgraph/'); //unix下的位置 } }
JPG-CONFIG.INC
此檔控制一部分字型的選擇,內有此行定義繁體中文字型的字體
//JPG-CONFIG.INC DEFINE('CHINESE_TTF_FONT','simhei.ttf');
可使用 FF_CHINESE aka FF_BIG5 不過這似乎此檔不是關鍵定義字型的部份,在網路上找到的文件選中文程式中設定都是 FF_SIMSUN,FS_BOLE
接著看 jpgraph_ttf.inc.php 注意此文件內的設定字體陣列,發現了 jpGraph 定義字型的關鍵程式,
我們要改的部份240行
//jpgraph_ttf.inc.php /* Chinese fonts */ FF_SIMSUN => array(FS_NORMAL =>'simsun.ttc', FS_BOLD =>'simhei.ttf', FS_ITALIC =>'', FS_BOLDITALIC =>'' ), FF_CHINESE => array(FS_NORMAL =>CHINESE_TTF_FONT, FS_BOLD =>'DFFN_M9.TTC', FS_ITALIC =>'', FS_BOLDITALIC =>'' ),
字型規則
FF_*** 選擇主要類別,FS 選擇字型,每個FF定義了每個字型的對應屬性,我將 CHINESE 內的 NORMAL 與 BOLD 放置了兩個我需要的字體,
之後程式在 SET_FONT 時就看要那個字體就應對著選擇 FF_CHINESE,[FS_NOMAL OR FS_BOLD]。
這樣在跑應該就能有中文了。