-------การใช้งานไลบรารี่ PHPExcel write PDF ภาษาไทย------
ลองใช้ iconv ช่วยหรือยังครับ
Date :
2010-11-22 12:02:56
By :
PlaKriM
ลองแล้วครับ
Date :
2010-11-22 12:23:05
By :
naskw
ทำได้ละครับ หลังจากงมอยู่นาน ขอบคุณคุณพี่ PlaKriM
ทำไมผมตั้งกระทู้เองแล้ว ต้องตอบเองแทบทุกครั้งไปหว่า
ประวัติการแก้ไข 2010-11-25 13:19:33 2010-11-25 13:19:40
Date :
2010-11-25 13:18:30
By :
naskw
ไม่ทราบท่านว่า anu แก้ปัญหายังไง ติดปัญหาำภาษาไทยกับ PDF นี้เหมือนกันครับ
ลองทั้ง iconv utf8_encode mb_convert_encoding ก็ยังไม่ได้
รบกวนแนะนำด้วยครับ ขอบคุณครับ
Date :
2011-01-17 11:02:49
By :
เอ็ม
ติดยังไงครับ ออกเป็นไฟล์ xls มันใช้ภาษาไทยได้ไหมครับ
Date :
2011-01-17 11:37:27
By :
ไวยวิทย์
Excel ได้ปกติครับ อย่างแจ่มเลย
แต่แปลงเป็น PDF กลับเป็นภาษาต่างดาวไปเลย
ชื่อไฟล์นี่เป็นภาษาไทยปกติ มีปัญหาเฉพาะในเนื้อเอกสาร
ลองพิมพ์แค่ว่า "ทดสอบ" ก็ยังไม่ได้เลย
เป็นทั้ง server windows และ linux
Date :
2011-01-17 12:39:16
By :
เอ็ม
$objPHPExcel->getActiveSheet()->setCellValue('D1', 'ทดสอบ'); ปกติเขียนอย่างนี้ใช่ไหมครับ
$objPHPExcel->getActiveSheet()->setCellValue('D1', ''.iconv('UTF-8','TIS-620','ทดสอบ').''); ลองเปลี่ยนเป็นแบบนี้
$objPHPExcel->getActiveSheet()->setCellValue('D1', ''.iconv('TIS-620','UTF-8','ทดสอบ').''); หรือแบบนี้ดูครับ
Date :
2011-01-17 12:50:14
By :
ไวยวิทย์
ขอบคุณครับ คุณไวยวิทย์
ลองแล้วยังไม่ได้เลยครับ ตอนนี้แอบปันใจให้ zend pdf บ้างแล้วครับ
สามารถใช้ฟอนต์ windows ได้ลงตัว ไม่มีปัญหาเรื่องสละลอยด้วยครับ
แต่ก็ไม่อยากใช้หลายตัว หาก PHPExcel write pdf ได้ไม่มีปัญหาก็จะใช้ PHPExcel นี่แหละครับ
Code (PHP)
error_reporting(E_ERROR);
require_once 'Excel/PHPExcel.php';
$objPHPExcel = new PHPExcel();
$objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setName('EucrosiaUPC');
$objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setSize(14);
$objPHPExcel->getActiveSheet()->getPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE);
$objPHPExcel->getActiveSheet()->getPageSetup()->setPaperSize(PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4);
$objPHPExcel->getActiveSheet()->getPageSetup()->setFitToWidth(1);
$objPHPExcel->getActiveSheet()->getPageSetup()->setFitToHeight(0);
$objPHPExcel->getActiveSheet()->getPageMargins()->setTop(1);
$objPHPExcel->getActiveSheet()->getPageMargins()->setRight(0.75);
$objPHPExcel->getActiveSheet()->getPageMargins()->setLeft(0.75);
$objPHPExcel->getActiveSheet()->getPageMargins()->setBottom(1);
$objPHPExcel->getActiveSheet()->setCellValue('a5', 'ทดสอบ');
$objPHPExcel->getActiveSheet()->setCellValue('a6', ''.iconv('UTF-8','TIS-620','ทดสอบ').'');
$objPHPExcel->getActiveSheet()->setCellValue('a7', ''.iconv('TIS-620','UTF-8','ทดสอบ').'');
$objPHPExcel->getActiveSheet()->setTitle('ทดสอบภาษาไทย');
$objPHPExcel->setActiveSheetIndex(0);
header('Content-Type: application/pdf');
header('Content-Disposition: attachment;filename="'.iconv('UTF-8','TIS-620','ทดสอบภาษาไทย').'.pdf"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'PDF');
$objWriter->save('php://output');
exit;
Date :
2011-01-18 09:37:56
By :
เอ็ม
ไม่รู้ว่าคุณเอ็มใช้งานได้หรือยังหน่ะครับ
phpexcel ใช้งาน tcpdf
1. ดาวน์โหลดฟ้อนท์ไทยก่อนที่ http://komsitr.net/?p=18
2. แตกไฟล์แล้วก็อบเอาฟ้อนที่จะใช้งานไป ผมใช้ angsanaupc จะมี 3 ไฟล์ คือ angsanaupc.ctg.z , angsanaupc.php และ angsanaupc.z
ไปวางที่ \Classes\PHPExcel\Shared\PDF\fonts
3. เปลี่ยนจาก
$objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setName('EucrosiaUPC');
เป็น
$objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setName('angsanaupc');
แล้วทดลองออกรายงานเป็น pdf เช่นเดิม โดยไม่ต้องใช้ iconv ครับ น่าจะได้ลองดูครับ
ขอบคุณลิงค์ดาวน์โหลดฟ้อนไทยด้วยครับผม ไม่รู้มีวิธีอื่นนอกจากนี้หรือเปล่าหน่ะครับ
อ่านเพิ่มเติม http://phpexcel.codeplex.com/Thread/View.aspx?ThreadId=232179
ประวัติการแก้ไข 2011-01-18 16:26:29 2011-01-18 16:27:02 2011-01-18 16:29:37 2011-01-18 16:39:41 2011-01-19 08:31:06 2011-01-19 08:33:31 2011-01-19 09:30:49
Date :
2011-01-18 16:25:43
By :
ไวยวิทย์
ขอบคุณครับ คุณไวยวิทย์
งานนี้ผมพลาดเอง เคยลองสร้างฟอนต์เอง แล้วเอาไปวางในส่วนของ tcpdf แล้วแหละครับ แต่ยังไม่ได้
เพราะไม่ได้เปลี่ยนให้เป็นฟอนต์ของ pdf ที่สร้างใหม่ (เข้าใจผิดว่าต้องใช้ชื่อฟอนต์เหมือน PHPExcel)
สรุปว่าแค่ตรงนี้ครับ
Excel :
$objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setName('Angsana New');
PDF :
$objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setName('angsa'); // ของผมสร้างใช้ชื่อ angsa
=============
***Zend_pdf ก็เยี่ยมนะครับ เป็นอีกทางเลือกที่น่าสนใจ แล้วก็จะได้เล่นตัวอื่นๆ ของ Zend ด้วย
----
ปล.
ผมหาฟอนต์ใน http://komsitr.net/?p=18 ไม่เจอ ไม่รู้อยู่ลิงค์ไหน
แต่ไม่เป็นไร ใช้ utils ของ tcpdf สร้างเอาก็ได้ครับ วิธีใช้ก็อยู่ในนั้นแหละ
Date :
2011-01-19 11:38:25
By :
เอ็ม
ผมทำเหมือนคุณไวย์วิทย์เด้เลยครับ แต่ผมไปหาอ่านในเน็ตที่เว็บไหนมะรู้ไม่ได้แล้ว
แต่ว่าไม่ทราบว่าคนอื่นเป็นเหมือนผมปะเวลาเรา setCellValue('A1','A')
แบบนี้คือจะใส่ตัวอักษรอังกฤษตัวเดียวลงไปใน cell มันไม่ได้ มันจะเป็นค่าว่างเลยครับ ไม่ว่าตัวไรก็ตาม a-z
แก้ยังไงกันหรอ
Date :
2011-01-20 09:35:46
By :
naskw
คุณ Anu ออกเป็น xls หรือ pdf ครับ ที่ไม่ได้ ของผมปกติหน่ะครับ
Code (PHP)
<?php
/** PHPExcel */
require_once 'Classes/PHPExcel.php';
// Create new PHPExcel object
$objPHPExcel = new PHPExcel();
// Set properties
$objPHPExcel->getProperties()->setCreator("test");
// Add some data
$txt = range('A','D');
for($i=0; $i< 8; $i++){
foreach($txt as $key => $val)
{
// Set column widths
$objPHPExcel->getActiveSheet()->getColumnDimension(''.$val.'')->setWidth(10);
$objPHPExcel->getActiveSheet()->getRowDimension(''.$i.'')->setRowHeight(23);
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue(''.$val.''.$i.'', ''.$val.'');
$objPHPExcel->getActiveSheet()->getStyle(''.$val.''.$i.'')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
$objPHPExcel->getActiveSheet()->getStyle(''.$val.''.$i.'')->getFill()->getStartColor()->setARGB('5cb3fc');
}
}
// Rename sheet
$objPHPExcel->getActiveSheet()->setTitle('test');
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);
// Create a new worksheet, after the default sheet
$objPHPExcel->createSheet();
/** PHPExcel_IOFactory */
require_once './Classes/PHPExcel/IOFactory.php';
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save(''.iconv('UTF-8','TIS-620','ทดสอบ').'.xls');
?>
คุณ Anu ไม่ทราบว่าได้สร้าง font เอง หรือเปล่าครับ ผมลองไปโหลดฟ้อนจาก f0nt.com ซึ่งเป็น ttf มาทดลองสร้างเองตามในเว็บของ
tcpdf และก็ได้ไฟล์ .php , .ctg.z และ .z มาแล้วก็อบไปวาง ที่โฟลเดอร์ font มันไม่ได้ ครับ
ตัวอักษรมันเป็นสี่เหลี่ยมหมด แนะนำวิธีสร้างที่ถูกต้องทีครับ
ผมอ่านจาก
http://sandeepverma.wordpress.com/2009/12/10/create-tcpdf-php-fonts/
http://www.tcpdf.org/fonts.php
สองลิงค์นี้แหระครับ
Date :
2011-01-20 10:05:49
By :
ไวยวิทย์
ได้มาจาก http://phpexcel.codeplex.com/workitem/14233
You must change the PHPExcel/Shared/String.php with the file attach
The only change is line 306
Code (PHP)
if (!@iconv('UTF-8', 'UTF-16LE', 'x')) {
to
Code (PHP)
if (!@iconv_substr('A', 0, 1, 'UTF-8')) {
แก้ปัญหาข้างบนได้แต่ ไม่รู้ว่าจะมีผลกะอย่างอื่นอีกหรือเปล่าต้องลองดู
ประวัติการแก้ไข 2011-01-20 10:06:44
Date :
2011-01-20 10:06:01
By :
naskw
หมายถึงแก้ตัว A ที่เขียนลงไม่ได้หรือว่าแก้การสร้าง อักษร ครับ
Date :
2011-01-20 10:11:50
By :
ไวยวิทย์
ตอนนนี้แก้ไข Write PDF ภาษาไทย ได้แล้วครับ ทำเหมือนคุณไวยวิทย์ทำครับ แต่ผมไม่ได้สร้าง Font เองครับไปโหลดมาเหมือนกัน
แต่จำไม่ได้ว่าเอามาจากไหน อิๆ
ส่วนอีกเรื่องนึงคือการใส่ค่าตัวอักษรภาษาอังกฤษตัวเดียว A-Z ก็ได้แล้วครับทำแบบความเห็นที่ 14 อันนี้ ออกเป็น XLS นะครับ ส่วน PDF ไม่ได้ลอง
Date :
2011-01-20 10:29:34
By :
naskw
ผมว่าใครมีปัญหาอะไรเกี่ยวกับตัว PHPExcel มาโพสในนี้ละกัน เผื่อจะช่วยกันได้ จะได้ลดเวลาการทำงานดีกว่ามานั่งงมเอง เอาประสบการณ์มาแชร์กัน เพราะคิดว่าน่าจะใช้กันเยอะอยู่ ผมเพิ่งลองใช้ตัวนี้เหมือนกันยอมรับว่าแจ่มมากๆ ได้ใช้หลายงานละ
Date :
2011-01-20 11:01:22
By :
naskw
ผมลองสร้างฟอนท์เองแล้วใช้ไม่ได้
ใครเคยทำ แนะนำด้วยหน่ะครับ
Date :
2011-01-20 12:48:25
By :
ไวยวิทย์
มีปัญหาใหม่อีกละครับตอนนนี้ทำไฟล์ CSV ตัวอย่างนะครับไฟล์ที่ได้ออกมาตอนนี้เป็นแบบนี้
แถวแรกผมใส่ข้อมูลถึงคอลัมน์ I แถวที่สองใส่ข้อมุลถึงคอลัมน์ C
แถวที่1: A,,,,,,,,I,
แถวที่2: A,,C,,,,,,
สังเกตตรงแถวที่2หลังตัว C จะมีเครื่องหมาย , เพิ่มมาอีก6ตัว แต่ผมต้องการให้มันเพิ่มมาอีกแค่ 1 ต้องทำไง
แบบนี้ที่ต้องการ
แถวที่1: A,,,,,,,,I,
แถวที่2: A,,C,
Date :
2011-01-20 14:02:53
By :
naskw
คุณ Anu เขียนยังไงเหรอครับ ผมยังไม่ได้ลองออก csv ด้วยสิ
Date :
2011-01-20 14:21:37
By :
ไวยวิทย์
ก็เขียนเหมือนจะออก XLS นะแหละครับ แต่ตอน Write เปลี่ยนมา Write เป็นแบบ CSV
Code (PHP)
$objWriter = new PHPExcel_Writer_CSV($objPHPExcel);
$objWriter->setDelimiter(',');
$objWriter->setEnclosure('');
//$objWriter->setLineEnding("\r\n");
$objWriter->setSheetIndex(0);
$objWriter->save($save_path);
ถ้ายังทำไม่ได้เดี๋ยวจะไปใช้การเขียนไฟล์แบบธรรมดาของ PHP แล้วคั้นด้วย , เอาขี้เกียจหา เดี๋ยวจะไม่ทัน อิๆ
Date :
2011-01-20 14:31:57
By :
naskw
ใช้ PHPExcel สร้างไฟล์ excel ขึ้นมาโดยดึงข้อมูลจาก mysql แต่ว่าข้อมูลที่เป็นภาษาไทยเป็น ????? หมดเลย
ไม่ทราบว่าต้องแก้ไขยังไงคะ
โค้ดที่ใช้ ExportMySql2Excel.php จากลิ้งนี้ค่ะ https://www.thaicreate.com/community/phpexcel-and-mysql.html
ขอบคุณล่วงหน้าค่ะ
Date :
2012-06-26 15:17:33
By :
yuyu
ส่งสัยได้เพขียนวิธีแก้ปัญหาภาษาไทยซะล่ะ
Date :
2012-06-26 16:28:39
By :
mr.win
เปลี่ยนแค่ตรงนี้ได้เลยครับ
จากเดิม tis620
mysql_query("set names tis620");
เปลี่ยนเป็น
mysql_query("set names utf8");
ผมเคยใช้ class.writeexcel_worksheet.inc มันต้องใช้ tis620 ถึงจะอ่านไทยได้
แต่เปลี่ยนมาใช้ PHPExcel ต้องเปลี่ยนกลับเป็น utf8 ครับ
ลองดูเน้อออ
Date :
2014-02-18 11:17:47
By :
supaman
่้่้ส้่าส
Date :
2019-05-24 15:29:36
By :
้่าส้
Load balance : Server 05