18 มกราคม 2554

การใช้งาน PHPExcel Class สร้างไฟล์ PDF สำหรับภาษาไทย

 หลังจากได้ทดลองสร้างไฟล์ PDF จากไลบรารี่ ของ PHPExcel แล้วไม่รองรับภาษาไทย ซึ่งจะทำให้ภาษาไทยเป็นตัวอักษร สี่เหลี่ยม  บทความนี้เราจะมาดูวิธีการทำให้ PDF รองรับภาษาไทยกัน

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('angsanaupc');
   ปรับค่า setName  ตามอักษรที่เราต้องการ

แล้วทดลองออกรายงานเป็น pdf เช่นเดิม โดยไม่ต้องใช้ iconv ครับ 

ขอบคุณ  เว็บ http://komsitr.net/?p=18 

อ่านเพิ่มเติม http://phpexcel.codeplex.com/Thread/View.aspx?ThreadId=232179

ป.ล.อาจจะมีวีธีที่ดีกว่านี้ซึ่งผมยังไม่เจอครับ 

14 มกราคม 2554

การใช้งาน PHPExcel Class สร้างไฟล์ PDF

   ดาวน์โหลด Class มาจาก  : http://phpexcel.codeplex.com/releases/view/26479 เวอร์ชั่นล่าสุด: 1.7.5

  วิธีการใช้งาน Class เพื่อสร้างไฟล์ PDF ลักษณะการทำงานก็คล้าย ๆ กับการสร้างไฟล์ xls ดังนี้

<?php

/** Error reporting */
error_reporting(E_ALL);

date_default_timezone_set('Europe/London');

/** PHPExcel */ 
require_once 'Classes/PHPExcel.php';  // แทรก Class ที่ดาวโหลดมา

// Create new PHPExcel object
$objPHPExcel = new PHPExcel();

// Set properties
$objPHPExcel->getProperties()->setCreator("Chaiwit");

//Setting a worksheet's page orientation and size
$objPHPExcel->getActiveSheet()->getPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE); // กำหนดแนวตั้ง / แนวนอน
$objPHPExcel->getActiveSheet()->getPageSetup()->setPaperSize(PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4); // กำหนดขนาดกระดาษ
//Page Setup: Scaling options
$objPHPExcel->getActiveSheet()->getPageSetup()->setFitToWidth(1); // กำหนดมาตราส่วน หรือไม่ก็ได้
$objPHPExcel->getActiveSheet()->getPageSetup()->setFitToHeight(0); // กำหนดมาตราส่วน หรือไม่ก็ได้

//Page margins // กำหนดระยะขอบ
$objPHPExcel->getActiveSheet()->getPageMargins()->setTop(1); // กำหนดระยะขอบ บน
$objPHPExcel->getActiveSheet()->getPageMargins()->setRight(0.75); // กำหนดระยะขอบ ขวา
$objPHPExcel->getActiveSheet()->getPageMargins()->setLeft(0.75); // กำหนดระยะขอบ ซ้าย
$objPHPExcel->getActiveSheet()->getPageMargins()->setBottom(1); // กำหนดระยะขอบ ล่าง

// Add some data วนลูปแสดงข้อมูล
$txt = range('A','O');

for($i=0; $i< 30; $i++){
    foreach($txt as $key => $val)
    {        
       $objPHPExcel->getActiveSheet()->getColumnDimension(''.$val.'')->setWidth(9.5); // กำหนดความกว้าง

 $objPHPExcel->getActiveSheet()->getRowDimension(''.$i.'')->setRowHeight(23); // กำหนดความสูงของแถว
        $objPHPExcel->setActiveSheetIndex(0)->setCellValue(''.$val.''.$i.'', ''.$key.''); // เพิ่มค่า
       
       // กำหนดสีพื้นหลังให้ cell
        $objPHPExcel->getActiveSheet()->getStyle(''.$val.''.$i.'')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
        $objPHPExcel->getActiveSheet()->getStyle(''.$val.''.$i.'')->getFill()->getStartColor()->setARGB('5c5cb3fc');
    }
}

// Rename sheet
$objPHPExcel->getActiveSheet()->setTitle('Chaiwit');

// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);

// Redirect output to a client’s web browser
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'); // จุดที่แตกต่างไปจากการสร้างไฟล์ excel
$objWriter->save('php://output');
exit;

?>

13 มกราคม 2554

การใช้งาน PHPExcel

วิธีการเริ่มต้น การใช้งาน PHPExcel
----------------------------------------------------------------------------------
<?php

/** PHPExcel */
require_once 'Classes/PHPExcel.php'; // แทรก Class ที่ดาวโหลดมา

// Create new PHPExcel object // เริ่มต้นสร้าง object
$objPHPExcel = new PHPExcel();

// Set properties // ระบุผู้สร้างไฟล์ จะระบุหรือไม่ก็ได้
$objPHPExcel->getProperties()->setCreator("Chaiwit");

//+ กำหนดชื่อ ฟอนต์ ที่จะใช้งาน
$objPHPExcel->getDefaultStyle()->getFont()->setName('Arial');

//+ กำหนดขนาด ฟอนต์
$objPHPExcel->getDefaultStyle()->getFont()->setSize(15);

// Add some data // เริ่มต้นแสดงข้อมูล
$txt = range('A','E');

for($i=0; $i< 8; $i++){
foreach($txt as $key => $val)
{
$objPHPExcel->getActiveSheet()->getColumnDimension(''.$val.'')->setWidth(10); // กำหนดความกว้างของแถว $objPHPExcel->getActiveSheet()->getRowDimension(''.$i.'')->setRowHeight(23); // กำหนดความสูงของแถว
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue(''.$val.''.$i.'', ''.$key.'');
}
}

// insert image // ตัวอย่างในการแทรกรูปภาพลงในไฟล์ ระบุที่เซล B15
$objDrawing = new PHPExcel_Worksheet_Drawing();
$objDrawing->setName('Logo');
$objDrawing->setDescription('Logo');
$objDrawing->setPath('./Tests/images/officelogo.jpg');
$objDrawing->setHeight(36);
$objDrawing->setWidth(100);
$objDrawing->setCoordinates('B15');
$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());

// Rename sheet // สร้างชื่อ Sheet
$objPHPExcel->getActiveSheet()->setTitle('Chaiwit');

// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0); // กำหนดให้เมื่อเราเปิดไฟล์ให้แสดง sheet ไหนเป็นอันดับแรก

// Create a new worksheet, after the default sheet
$objPHPExcel->createSheet(); // ในกรณีที่เราสร้างหลาย ๆ Sheet ในงานไฟล์เดียว

/** PHPExcel_IOFactory */
require_once './Classes/PHPExcel/IOFactory.php';

// ตรงนี้เริ่มสู่กระบวนการสร้างไฟล์ xls
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('chaiwit.xls');
//$objWriter->save(''.iconv('UTF-8','TIS-620','ชัยวิทย์').'.xls'); // ใช้ในกรณีทำให้ไฟล์ที่ Save เป็นชื่อ ภาษาไทย

-------------------------------------------------------------------------------------------------
/* ตั้งแต่แถวนี้จะเป็นการใช้ในกรณีที่จะให้มันขึ้น Dialog มาเพื่อทำการ Save AS ไฟล์นั้น ใช้แทนคำสั่ง สร้างไฟล์ xls ด้านบน */

// redirect output to client browser
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="Chaiwit.xls"');
header('Cache-Control: max-age=0');

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');

?>

แนะนำความรู้นี้โดย พี่ปลาทู แห่ง http://www.select2web.com/

หาความรู้เพิ่มเติมจาก Documentation ที่ให้มาพร้อมกับ Class ที่ดาวโหลดมาได้เลยครับ
ดาวน์โหลด : http://phpexcel.codeplex.com/releases/view/26479 เวอร์ชั่นล่าสุด: 1.7.5