ขอแจมมั่งครับ
การทำให้ JP Graph แสดงอักษรภาษาไทยได้

เริ่มต้นต้องไป define font ให้แก่ jpgraph.php
ประมาณบรรทัดที่ 70 จะเป็นการ define TTF นะครับ เราต้อง DEFINEfont ที่ต้องการใช้ไว้ ผมจะยกตัวอย่างเป็นTAHOMA นะครับ

DEFINE("FF_TAHOMA",n);


เลข n คือเลขลำดับน่ะครับ  เราก็ใส่เลขต่อจาก font ที่ define ไว้ก่อนหน้า (เช่น DEFINE("FF_MICROSS",44);
DEFINE("FF_TAHOMA",45);) นะครับ

 

ต่อไปจะเป็นการ define path ของ font น่ะครับ อาจจะ configure ใน jpg-configure หรือใน jpgraph.php

ประมาณบรรทัดที่ 52 ของ jpgraph.php จะมีเงื่อนไขว่า !define(TTF_DIR) น่ะครับ   ในเงื่อนไขนั้นจะมีให้ตั้ง path ของ font TTF ของ OS window กับ OS อื่นๆ  ใส่ path ของ font เข้าไปเลยครบ  เช่น เก็บ font TAHOMA.TTF ไว้ใน /home/www/htdocs/eutility/jpgraph/fonts/

ก็จะกำหนด TTF_DIR เป็น DEFINE('TTF_DIR','/home/www/htdocs/eutility/jpgraph/fonts/');

ตัวอย่างจากโค้ด

if (!defined('TTF_DIR')) {
 if (strstr( PHP_OS, 'WIN') ) {
  $sroot = getenv('SystemRoot');
  if( empty($sroot) ) {
   die('JpGraph Error: No path specified for TTF_DIR and path can not be determined automatically. Please specify TTF_DIR manually (in jpg-config.inc).');
  }else {
     DEFINE('TTF_DIR', $sroot.'/fonts/');
  }
 }else {
  DEFINE('TTF_DIR','/home/www/htdocs/eutility/jpgraph/fonts/');
 }
}

 

ต่อมาจะแก้ไข class TTF โดยแก้ไข array font_files

โดยเพิ่ม element เข้าไป ตัวอย่างจะเป็นการเพิ่ม element ของ font TAHOMA

FF_TAHOMA => array(FS_NORMAL=>'TAHOMA.TTF', FS_BOLD=>'tahomabd.TTF', FS_ITALIC=>'', FS_BOLDITALIC=>'' )

 

สุดท้ายต้องทำการเปลี่ยนโค้ดอักษรภาษาไทยสักหน่อย กระผมเองก็ไม่ทราบเหตุผลน่ะครับ(หุๆ ก็แค่ใช้เป็นน่ะครับ  ไม่ได้เก่งอะไรมากนัก) 

เอาฟังก์ชัน php อันนี้ไว้ใช้

function UniThai($s) {
  $x = "";
  $len = strlen($s);
  for ( $i = 0; $i < $len; $i++)
  {
   if ( ord($s[$i]) > 128 )
    $x .= "&#".(ord($s[$i]) - 160 + 3584).";";
   else
    $x .= $s[$i];
  }
  return $x;
 }

 

ตัวอย่างการเรียกใช้

$graphName="เปรียบเทียบการใช้ประปา";     
$graphName=UniThai($graphName); 
$graph->title->Set($graphName);
$graph->title->SetFont(FF_TAHOMA,FS_NORMAL);