ใช้งาน PHPExcel ร่วมกับ mPDF ออกรายงานเป็น pdf รองรับภาษาไทย

เขียนเมื่อ 8 ปีก่อน โดย Ninenik Narkdee
mpdf ภาษาไทย phpexcel

คำสั่ง การ กำหนด รูปแบบ ตัวอย่าง เทคนิค ลูกเล่น การประยุกต์ การใช้งาน เกี่ยวกับ mpdf ภาษาไทย phpexcel

ดูแล้ว 22,574 ครั้ง


นอกจาก PHPExcel จะสามารถออกรายงาน หรือสร้างไฟล์ excel ได้แล้ว
ก็ยังมีคุณสมบัติสามารถใช้งานร่วมกับ pdf library อย่างเช่น mPDF ที่ทำให้
สามารถเปลงไฟล์จากรูปแบบ excel เป็น ไฟล์ pdf ได้อีกด้วย
 
รูปแบบจะคล้ายกับเนื้อหาก่อนหน้า
 
ออกรายงานเป็น excel ไฟล์ด้วย PHPExcel ตอนเริ่มใช้ 
 
โดยจะต่อยอดเพิ่มส่วนของ mPDF เข้ามาพร้อมกับการเรียกใช้งาน
 
ก่อนอื่นให้ดาวน์โหลด library mPDF จากลิ้งค์ด้านล่าง ซึ่งได้เพิ่ม fonts
ภาษาไทยชื่อ thsarabunnew เข้าไปแล้ว เป็น mPDF เวอร์ชั่น 5.4
 
 
หลังจากโหลดเสร็จให้แตกไฟล์ แล้ว copy โฟลเดอร์ libraries ไว้ในตำแหน่งตามรูป
 
 
 
 
โครงสร้างตัวอย่างจะมีตามนี้
- Classes
- libraries โฟลเดอร์มี mPDF อยู่ด้านใน ที่โหลดจากลิ้งค์ด้านบน
- excel_files  โฟลเดอร์สำหรับ บันทึกไฟล์ excel (ของบทความก่อน)
- sample_excel1.php ไฟล์ทดสอบอย่างง่ายสร้างไฟล์ excel  (ของบทความก่อน)
- pdf_files  โฟลเดอร์สำหรับ บันทึกไฟล์ pdf
- sample_genpdf.php ไฟล์ทดสอบอย่างง่าย
 
 
โค้ดไฟล์ sample_genpdf.php  (ดัดแปลงและประยุกต์ให้ใช้งานง่ายขึ้นเล็กน้อย)
 
<?php
/** Error reporting */
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
date_default_timezone_set('Asia/Bangkok');
// http://php.net/manual/en/timezones.php

define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />'); // ส่วนนี้ไม่มีอะไรกำหนดค่าไว้ใช้ในการ echo
require_once 'Classes/PHPExcel.php';  // เรียกใช้งาน class

//     กำหนด Rendering library pdf ที่ต้องการ ในที่นี้ใช้ mpdf รองรับภาษาไทย เวอร์ชั่น 5.4
$rendererName = PHPExcel_Settings::PDF_RENDERER_MPDF;  
$rendererLibraryPath = "libraries/MPDF54";  



// เชื่อมต่อฐานข้อมูล  
//$link=mysql_connect("localhost","root","test") or die("error".mysql_error());  
//mysql_select_db("test",$link);  
//mysql_query("set character set utf8");  

// โฟลเดอร์เก็บไฟล์ กรณีใช้ใน server ให้กำหนด permission เป็น 777
$placeFilesSave="pdf_files/";

// สร้าง PHPExcel object
echo date('H:i:s') , " Create new PHPExcel object" , EOL;
$objPHPExcel = new PHPExcel();

// กำหนดค่าต่างๆ ของเอกสาร excel
echo date('H:i:s') , " Set document properties" , EOL;
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
							 ->setLastModifiedBy("Maarten Balliauw")
							 ->setTitle("PHPExcel Test Document")
							 ->setSubject("PHPExcel Test Document")
							 ->setDescription("Test document for PHPExcel, generated using PHP classes.")
							 ->setKeywords("office PHPExcel php")
							 ->setCategory("Test result file");

// กำหนด รูปภาพ style ที่จะใช้
$styleArray = array(
    'font'  => array(
//        'bold'  => true,
//        'color' => array('rgb' => 'FF0000'),
        'size'  => 14,
        'name'  => 'thsarabunnew'  // ภาษาไทย
    ));


// การจัดรูปแบบของ cell
$objPHPExcel->getDefaultStyle()
                        ->applyFromArray($styleArray)
                        ->getAlignment()
                        ->setVertical(PHPExcel_Style_Alignment::VERTICAL_TOP)
                        ->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); 
                        //HORIZONTAL_CENTER //VERTICAL_CENTER


// การเพิ่มข้อมูล
echo date('H:i:s') , " Add some data" , EOL;
$objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('A1', 'หัวข้อ')           
            ->setCellValue('B1', 'หัวข้อย่อย');


// เราจะทดสอบเพิ่มข้อมูลในตาราง excel อย่างง่าย
$start_row=2;
for($i=1;$i<=10;$i++){
$objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('A'.$start_row, $i)
            ->setCellValue('B'.$start_row, $i*2);
    $start_row++;
}
 

// กำหนดชื่อให้กับ worksheet ที่ใช้งาน
echo date('H:i:s') , " Rename worksheet" , EOL;
$objPHPExcel->getActiveSheet()->setTitle('Simple');

// กำหนด worksheet ที่ต้องการให้เปิดมาแล้วแสดง ค่าจะเริ่มจาก 0 , 1 , 2 , ......
$objPHPExcel->setActiveSheetIndex(0);

// ชื่อไฟล์
$saveFileName="pdfl_by_phpexcel1";

// ตรวจสอบการตั้งค่า Rendering library pdf แล้วหรือไม่
if(!PHPExcel_Settings::setPdfRenderer(  
        $rendererName,  
        $rendererLibraryPath  
    )) {  
    die(  
        'NOTICE: Please set the $rendererName and $rendererLibraryPath values' .  
        '<br />' .  
        'at the top of this script as appropriate for your directory structure'  
    );  
}  
  
    
// แสดงการเขียนไฟล์เรียกร้อยแล้ว และมีลิ้งค์ให้ดาวโหลด
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'PDF');  
$saveFileNameFull=$saveFileName.".pdf";
$pathSaveFile1=$placeFilesSave.$saveFileNameFull;
$objWriter->save($pathSaveFile1);
echo date('H:i:s') , " Done writing files" , EOL;
echo 'Files have been created in ' , $placeFilesSave , EOL;
echo "<a href='".$pathSaveFile1."' target='_blank'>Download PDF</a>",EOL;
?>


 
ทดสอบ run ไฟล์ จะได้ตามนี้
 


 
เราจะได้ไฟล์ pdf อยู่ในโฟลเดอร์ pdf_files ตามรูป
 


 
ลองเปิดไฟล์ pdf จะได้ตามนี้
 


 
 
ตัวอย่างไฟล์ run บน server
 
 
หมายเหตุ:: กรณีบันทึกไฟล์บน server เราต้องกำหนด permision 
ให้กับโฟลเดอร์ pdf_files เป็น 777 เพื่อให้สามารถเขียนไฟล์ได้


   เพิ่มเติมเนื้อหา ครั้งที่ 1 วันที่ 27-06-2017


การกำหนด header footer ใน pdf ที่สร้างข้อมูลด้วย PHPExcel และ render เป็น pdf ไฟล์ mpdf 
เราไม่สามารถกำหนด header และ footer โดยตรงผ่าน PHPExcel ได้ แนวทางคือ
ให้ทำการส่งค่าผ่าน session ตามรูปแบบดังนี้
 
<?php  
/** Error reporting */  
error_reporting(E_ALL);  
ini_set('display_errors', TRUE);  
ini_set('display_startup_errors', TRUE);  
date_default_timezone_set('Asia/Bangkok');  
// http://php.net/manual/en/timezones.php  
  
define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />'); // ส่วนนี้ไม่มีอะไรกำหนดค่าไว้ใช้ในการ echo  
require_once 'Classes/PHPExcel.php';  // เรียกใช้งาน class  
  
//     กำหนด Rendering library pdf ที่ต้องการ ในที่นี้ใช้ mpdf รองรับภาษาไทย เวอร์ชั่น 5.4  
$rendererName = PHPExcel_Settings::PDF_RENDERER_MPDF;    
$rendererLibraryPath = "libraries/MPDF54";    
 
เพิ่มส่วนของการกำหนด session ส่งค่า header และ footer ดังนี้
 
<?php
session_start();
/** Error reporting */
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
date_default_timezone_set('Asia/Bangkok');
// http://php.net/manual/en/timezones.php

define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />'); // ส่วนนี้ไม่มีอะไรกำหนดค่าไว้ใช้ในการ echo
require_once 'Classes/PHPExcel.php';  // เรียกใช้งาน class

$_SESSION['mpdf_header']=" This is Header"; // ส่วนของข้อความ header ปล่อยว่างถ้าไม่ต้องการกำหนด
$_SESSION['mpdf_footer']=" This is Footer"; // ส่วนของข้อความ footer ปล่อยว่างถ้าไม่ต้องการกำหนด
//     กำหนด Rendering library pdf ที่ต้องการ ในที่นี้ใช้ mpdf รองรับภาษาไทย เวอร์ชั่น 5.4
$rendererName = PHPExcel_Settings::PDF_RENDERER_MPDF;  
$rendererLibraryPath = "libraries/MPDF54";  
 
จากนั้นให้ทำการเพิ่มส่วนของการกำหนดค่า pdf ที่ไฟล์ config.php ในโฟลเดอร์ > libraries > MPDF54
โดยเพิ่มโค้ดคำสั่ง php ต่อไปนี้ไปด้านล่างสุดของไฟล์
 
if(isset($_SESSION['mpdf_header']) && $_SESSION['mpdf_header']!=""){
	$this->SetHeader($_SESSION['mpdf_header']);
}
if(isset($_SESSION['mpdf_footer']) && $_SESSION['mpdf_footer']!=""){
	$this->SetFooter($_SESSION['mpdf_footer']);
}
 

ดูการตั้งค่า mpdf เพิ่มเติมได้ที่ https://mpdf.github.io/headers-footers/method-1.html


กด Like หรือ Share เป็นกำลังใจ ให้มีบทความใหม่ๆ เรื่อยๆ น่ะครับ







เนื้อหาที่เกี่ยวข้อง






เนื้อหาพิเศษ เฉพาะสำหรับสมาชิก

กรุณาล็อกอิน เพื่ออ่านเนื้อหาบทความ

ยังไม่เป็นสมาชิก

สมาชิกล็อกอิน



( หรือ เข้าใช้งานผ่าน Social Login )




URL สำหรับอ้างอิง





คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )







เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ