เชิญชวนทุกท่านร่วมกิจกรรม : แลกเปลี่ยนความรู้ผ่าน "หนังสือ" แทนความรักแด่ครอบครัว GotoKnow

อ่าน: 1556
ความเห็น: 10

php jpgraph ใช้ภาษาไทยไม่ได้ มีวิธีแก้

การใช้ jpgraph แก้ไขปัญหาภาษาไทย

เขียนโปรแกรมกับ php แล้วจำเป็นต้องออกรายงานหรือ Graph แสดงข้อมูล ไม่อยากเสียเวลาเขียน function graph ให้วุ่นวาย ก็เรียกใช้บริการ jpgraph (http://www.aditus.nu/jpgraph/) ซึ่งมีรูปแบบของ graph ให้เลือกใช้อย่างมากมาย มากจนเลือกไม่ถูก แต่ไม่วายมีปัญหากับภาษาไทย ซะนี่ ออกมาเป็นภาษาต่างดาว

ทำงัยดีหล่ะ ต้องพึ่งพาพี่ Google และ document ของ jpgraph (http://www.aditus.nu/jpgraph/phptip04.php) ... กว่าจะได้ผลลัพธ์ตามต้องการก็ใช้เวลานิดหน่อย ดูรายละเอียดตามนี้เลยครับ ลองมาแล้วได้ผลจริงครับ

ใช้ jpgraph แล้วภาษาไทย ไม่ได้ ให้แก้ตามนี้ คือเพิ่ม font ภาษาไทย เข้าไปใน file

1. jpg-config.inc.php

DEFINE('CORDIA_TTF_FONT', 'cordia.ttf');
DEFINE('CORDIAB_TTF_FONT', 'cordiab.ttf');
DEFINE('CORDIAI_TTF_FONT', 'cordiai.ttf');
DEFINE('CORDIAZ_TTF_FONT', 'cordiaz.ttf');

DEFINE('ANGSA_TTF_FONT', 'angsa.ttf');
DEFINE('ANGSAB_TTF_FONT', 'angsab.ttf');
DEFINE('ANGSAI_TTF_FONT', 'angsai.ttf');
DEFINE('ANGSAZ_TTF_FONT', 'angsaz.ttf');

DEFINE('TAHOMA_TTF_FONT', 'tahoma.ttf');
DEFINE('TAHOMAB_TTF_FONT', 'tahomabd.ttf');
 

2. jpgraph_ttf.inc.php

// Thai font ( Number 40-80 )
DEFINE("FF_ANGSA",47);
DEFINE("FF_CORDIA",48);
DEFINE("FF_TAHOMA",49);

และเพิ่มเติมใน class TTF ในไฟล์เดียวกัน

  /* thai font */
  FF_CORDIA => array(FS_NORMAL=>CORDIA_TTF_FONT,
    FS_BOLD=>CORDIAB_TTF_FONT,
    FS_ITALIC=>CORDIAI_TTF_FONT,
    FS_BOLDITALIC=>CORDIAZ_TTF_FONT ),
  
  FF_ANGSA => array(FS_NORMAL=>ANGSA_TTF_FONT,
    FS_BOLD=>ANGSAB_TTF_FONT,
    FS_ITALIC=>ANGSAI_TTF_FONT,
    FS_BOLDITALIC=>ANGSAZ_TTF_FONT ),
 
  FF_TAHOMA => array(FS_NORMAL=>TAHOMA_TTF_FONT,
    FS_BOLD=>TAHOMAB_TTF_FONT),

สำคัญอีกอย่างคือการแสดงผล ภาษาไทยใน graph ต้องแปลงให้เป็น unicode ก่อน เช่น

$title = iconv('TIS-620', 'UTF-8',"รายงาน Graph แสดงจำนวน");
 

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

<?php

// Example for use of JpGraph,
// ljp, 01/03/01 20:32
include ("../jpgraph/src/jpgraph.php");
include ("../jpgraph/src/jpgraph_bar.php");
 
$title = iconv('TIS-620', 'UTF-8',"รายงานแสดงค่าใช้จ่ายต่อเดือน");
 
// We need some data
$datay=array(0.13,0.25,0.21,0.35,0.31,0.06);
$datax=array("Jan","Feb","Mar","Apr","May","June");
// Setup the graph.
$graph = new Graph(600,400,"auto"); 
$graph->img->SetMargin(60,40,50,120);
$graph->SetScale("textlin");
$graph->SetMarginColor("lightblue");
$graph->SetShadow();
// Set up the title for the graph
$graph->title->Set($title);
$graph->title->SetFont(FF_TAHOMA, FS_BOLD, 16);
//$graph->title->SetFont(FF_TAHOMA,FS_NORMAL,12);
$graph->title->SetColor("darkred");
$graph->legend->SetFont(FF_TAHOMA,FS_BOLD);
// Setup font for axis
$graph->xaxis->SetFont(FF_TAHOMA,FS_NORMAL,12);
$graph->yaxis->SetFont(FF_TAHOMA,FS_NORMAL,12);
// Show 0 label on Y-axis (default is not to show)
$graph->yscale->ticks->SupressZeroLabel(false);
// Setup X-axis labels
$graph->xaxis->SetTickLabels($datax);
$graph->xaxis->SetLabelAngle(50);
// Create the bar pot
$bplot = new BarPlot($datay);
$bplot->SetWidth(0.6);
// Setup color for gradient fill style
$bplot->SetFillGradient("navy","#EEEEEE",GRAD_LEFT_REFLECTION);
// Set color for the frame of each bar
$bplot->SetColor("white");
$graph->Add($bplot);
$bplot->value->Show();
// Finally send the graph to the browser
$graph->Stroke();
?> 

 

ที่มา : narisa, jpgraph, และที่ google พาไป

หมวดหมู่: วิทยาศาสตร์ เทคโนโลยี
คำสำคัญ: javascript  jpgraph  php  programming
สัญญาอนุญาต: สงวนสิทธิ์ทุกประการ Copyright
สร้าง: จ. 12 พฤษภาคม 2551 @ 00:15 แก้ไข: จ. 12 พฤษภาคม 2551 @ 00:16

ความเห็น

1.
P
นายประจักษ์ ปานอินทร์
เมื่อ จ. 12 พฤษภาคม 2551 @ 07:22
#649642 [ ลบ ]

2.
30
noknoi [IP: 203.151.232.70]
เมื่อ ศ. 25 ก.ค. 2551 @ 10:45
#757713 [ ลบ ]

ขอบคุณมากนะคะ

3.
P
อบูฮันนาน
เมื่อ ส. 27 ก.ย. 2551 @ 21:06
#845977 [ ลบ ]

เนื้อหานี้ได้ copy มาจาก website หนึ่ง แต่จำไม่ได้แล้วว่าเอามาจากไหน ขอให้ credit คนเขียนคนแรกด้วยครับ. ขออภัยที่ไม่ได้อ้างถึงในตอนแรก

4.
30
หญิง [IP: 117.47.194.159]
เมื่อ พ. 01 ต.ค. 2551 @ 13:39
#852215 [ ลบ ]

ดึงข้อมูลจาก database มาเขียนเป็นกราฟต้องทำยังไงค่ะ

รบกวนช่วยให้คำชี้เเนะ เพราะว่าเป็นมือใหม่อยู่อ่ะค่ะ

5.
30
พิบูล [IP: 118.175.76.34]
เมื่อ อ. 21 ต.ค. 2551 @ 19:28
#892182 [ ลบ ]

ขอบคุณครับ

6.
30
chuap006 [IP: 61.7.145.42]
เมื่อ อ. 04 พ.ย. 2551 @ 09:49
#920232 [ ลบ ]

ขอบคุณมากครับ **

7.
30
nokio [IP: 61.19.210.250]
เมื่อ อ. 03 มี.ค. 2552 @ 10:24
#1162301 [ ลบ ]

ขอบคุณมากนะคะ ^^

8.
30
hellboy [IP: 125.25.44.7]
เมื่อ อ. 12 พฤษภาคม 2552 @ 01:26
#1285842 [ ลบ ]

มีประโยชน์ ขอบคุณครับ

9.
30
นก [IP: 125.25.41.237]
เมื่อ อ. 09 มิ.ย. 2552 @ 23:00
#1340631 [ ลบ ]

เวลาผมใส่ค่าในแกน X จะเกิด Error ขึ้นครับ แต่ถ้าไม่ใส่($graph->xaxis->SetTickLabels($datax);

)รันได้ปกติ แต่แกน X จะขึ้นเป็นตัวเลขแทน คือผมต้องการให้ขึ้นเป็นตัวอักษรตามที่เรากำหนด เหมือนตัวอย่างที่พี่เขียนมาให้ดูครับ ไม่รู้จะแก้อย่างไง ขอความกรุณาด้วยครับ ผมใช้กราฟเบบบาร์เหมือนที่พี่เขียนเป็นตัวอย่าง ขอบคุณอย่างมากครับ

// We need some data

$datay=array(0.13,0.25,0.21,0.35,0.31,0.06);

$datax=array("Jan","Feb","Mar","Apr","May","June");

|

|

|

|

// Setup X-axis labels

$graph->xaxis->SetTickLabels($datax);

$graph->xaxis->SetLabelAngle(50);

10.
30
mayu [IP: 202.44.135.35]
เมื่อ จ. 04 ม.ค. 2553 @ 00:34
#1779188 [ ลบ ]

ขอบคุณมากนะ

ชื่อ:
อีเมล:
IP แอดเดรส: 38.107.191.111
ข้อความ:  
เรียกใช้งานตัวจัดการข้อความ
 
รหัสสุ่ม: ( ใส่รหัสสุ่มที่แสดงไว้ด้านบน )
  ยกเลิก หรือ ดูตัวอย่างก่อนบันทึก หรือ

บันทึกอื่นๆ