PHP Ionic Angularjs Phonegap AJAX Javascript CSS MySQL jQuery Forum


ตัวอย่าง tcpdf ดึงข้อมูลจากฐานข้อมูล สร้าง report อย่างง่าย

15 November 2014 By
tcpdf report ฐานข้อมูล


เนื้อหาเกี่ยวกับ การสร้าง report เป้น ไฟล์ pdf ด้วย tcpdf นี้
เดิมมีบทความเก่าอยู่แล้ว 
 
ประยุกต์สร้าง pdf ไฟล์ จาก tcpdf class ด้วย php รองรับภาษาไทย 
http://www.ninenik.com/content.php?arti_id=226 via @ninenik
 
แต่คิดว่า ควรปรับมาใช้ เวอร์ชั่นที่ใหม่  และปัจจุบัน น่าจะดีกว่า
 
สามารรถดาวน์โหลดไฟล์ ตัวอย่างเบื้องต้น และไฟล์ที่เกี่ยวข้องได้ที่
https://goo.gl/S9LGrr
 
ฟอนท์ ภาษาไทยสำหรับ tcpdf  
(ถ้าใครโหลดไฟล์ จากด้านบนแล้ว จะมี font ภาษาไทยอยู่ด้วย ไม่ต้องไปดาวน์โหลดใหม่)
โดยชื่อที่เราจะเอาไปใช้และรองรับภาษาไทยมี
angsanaupc
cordiaupc
thsarabun  
http://komsitr.net/2010/03/fpdf-vs-tcpdf/tcpdf_thai_fonts/
 
หรือถ้าใครอยากสร้าง font เฉพาะ ลองสร้างด้วยวิธีตามนี้ดู 
http://www.tcpdf.org/fonts.php
 
หลังจากโหลดไฟล์แล้ว จะมีรูปแบบไฟล์ตัวอย่างประกอบ
 
หรือสามารถทำตามได้ดังนี้
 
1. ไฟล์ข้อมูลที่เราต้องการแสดงเป็นตาราง data_html.php ในตัวอย่าง
จะเป็นการไปดังข้อมูลจังหวัดมาแสดง
 
<?php
session_start();
header("Content-type:text/html; charset=UTF-8");                
header("Cache-Control: no-store, no-cache, must-revalidate");               
header("Cache-Control: post-check=0, pre-check=0", false);    
include("dbconnect.php");
?>
<style>
td{
        border:1px dashed #CCC;  
}
</style>

    <table cellspacing="0" cellpadding="1" border="0" style="width:1100px;">  
    	<tr>
        <td width="50" align="center" bgcolor="#F2F2F2">#</td>
        <td bgcolor="#F2F2F2">&nbsp;Topic</td>
        </tr>
<?php
        $i=1;
        $sql="SELECT * FROM  province_th WHERE 1 LIMIT 50 ";
		$result = $mysqli->query($sql);
    	if($result && $result->num_rows>0){ 
			while($row = $result->fetch_assoc()){
?>  
  <tr>
    <td align="center"><?=$i?></td>
    <td >&nbsp;<?=$row['province_name']?></td>
  </tr>
<?php $i++; }} ?>     
    </table>
 
2. ไฟล์สำหรับติดต่อกับฐานข้อมูล dbconnect.php 
 
<?php  
$mysqli = new mysqli("localhost", "root","","test");  
/* check connection */
if ($mysqli->connect_errno) {  
    printf("Connect failed: %s\n", $mysqli->connect_error);  
    exit();  
}  
if(!$mysqli->set_charset("utf8")) {  
    printf("Error loading character set utf8: %s\n", $mysqli->error);  
    exit();  
}
 
3. ไฟล์สร้าง pdf ในที่นี้ใช้ชื่อ test_list_table.php
 
<?php
// Include the main TCPDF library (search for installation path).
require_once('tcpdf/tcpdf.php');
include("tcpdf/class/class_curl.php");

// การตั้งค่าข้อความ ที่เกี่ยวข้องให้ดูในไฟล์ 
// tcpdf / config /  tcpdf_config.php 

// เริ่มสร้างไฟล์ pdf
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);

// กำหนดรายละเอียดของไฟล์ pdf
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('ninenik');
$pdf->SetTitle('TCPDF table report');
$pdf->SetSubject('TCPDF ทดสอบ');
$pdf->SetKeywords('TCPDF, PDF, ทดสอบ,ninenik, guide');

// กำหนดข้อความส่วนแสดง header
$pdf->SetHeaderData(
    PDF_HEADER_LOGO, // โลโก้ กำหนดค่าในไฟล์  tcpdf_config.php 
    PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 001',
    PDF_HEADER_STRING, // กำหนดเพิ่มเติมในไฟล์  tcpdf_config.php 
    array(0,0,0),  // กำหนดสีของข้อความใน header rgb 
    array(0,0,0)   // กำหนดสีของเส้นคั่นใน header rgb 
);

$pdf->setFooterData(
    array(0,64,0),  // กำหนดสีของข้อความใน footer rgb 
    array(220,44,44)   // กำหนดสีของเส้นคั่นใน footer rgb 
);

// กำหนดฟอนท์ของ header และ footer  กำหนดเพิ่มเติมในไฟล์  tcpdf_config.php 
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));

// ำหนดฟอนท์ของ monospaced  กำหนดเพิ่มเติมในไฟล์  tcpdf_config.php 
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

// กำหนดขอบเขตความห่างจากขอบ  กำหนดเพิ่มเติมในไฟล์  tcpdf_config.php 
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);

// กำหนดแบ่่งหน้าอัตโนมัติ
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

// กำหนดสัดส่วนของรูปภาพ  กำหนดเพิ่มเติมในไฟล์  tcpdf_config.php 
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);

// อนุญาตให้สามารถกำหนดรุปแบบ ฟอนท์ย่อยเพิมเติมในหน้าใช้งานได้
$pdf->setFontSubsetting(true);

// กำหนด ฟอนท์
$pdf->SetFont('thsarabun', '', 14, '', true);

// เพิ่มหน้า 
$pdf->AddPage();


$path_info = pathinfo($_SERVER['REQUEST_URI']);
$http = ($_SERVER['REQUEST_SCHEME'])?$_SERVER['REQUEST_SCHEME']."://":"http://";
$host = $_SERVER['SERVER_NAME'];
$pathDir = $path_info['dirname']."/";
$url = $http.$host.$pathDir;


// เรียกใช้งาน ฟังก์ชั่นดึงข้อมูลไฟล์มาใช้งาน
$html = curl_get($url."data_html.php"); // path ไฟล์ 
// ถ้าทดสอบบน server ใช้เป็น http://www.example.com/data_html.php
// ภ้าทดสอบที่เครื่องก็ใช้ http://localhost/data_html.php


// สร้าง pdf ด้วยคำสั่ง writeHTMLCell()
$pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true);

// แสดงไฟล์ pdf
$pdf->Output('table_report.pdf', 'I');
?>
 
 
โค้ดและตัวอย่างข้างต้น เป็นการนำเสนอวิธีการดึงข้อมูลจากฐานข้อมูลมาแสดงในรูปแบบ
report ตาราง จากนั้น สร้างไฟล์ pdf จากข้อมูลตารางนั้นๆ
 
ตัวอย่างไฟล์ที่สร้าง http://www.ninenik.com/demo/tcpdf/table_report.pdf


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


โค้ดตัวอย่าง การแทรกโค้ด html ที่ต้องการแปลงเป็น pdf  เพิ่มเติม

<?php
// Include the main TCPDF library (search for installation path).
require_once('tcpdf/tcpdf.php');
include("tcpdf/class/class_curl.php");

// การตั้งค่าข้อความ ที่เกี่ยวข้องให้ดูในไฟล์ 
// tcpdf / config /  tcpdf_config.php 

// เริ่มสร้างไฟล์ pdf
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);

// กำหนดรายละเอียดของไฟล์ pdf
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('ninenik');
$pdf->SetTitle('TCPDF table report');
$pdf->SetSubject('TCPDF ทดสอบ');
$pdf->SetKeywords('TCPDF, PDF, ทดสอบ,ninenik, guide');

// กำหนดข้อความส่วนแสดง header
$pdf->SetHeaderData(
    PDF_HEADER_LOGO, // โลโก้ กำหนดค่าในไฟล์  tcpdf_config.php 
    PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 001',
    PDF_HEADER_STRING, // กำหนดเพิ่มเติมในไฟล์  tcpdf_config.php 
    array(0,0,0),  // กำหนดสีของข้อความใน header rgb 
    array(0,0,0)   // กำหนดสีของเส้นคั่นใน header rgb 
);

$pdf->setFooterData(
    array(0,64,0),  // กำหนดสีของข้อความใน footer rgb 
    array(220,44,44)   // กำหนดสีของเส้นคั่นใน footer rgb 
);

// กำหนดฟอนท์ของ header และ footer  กำหนดเพิ่มเติมในไฟล์  tcpdf_config.php 
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));

// ำหนดฟอนท์ของ monospaced  กำหนดเพิ่มเติมในไฟล์  tcpdf_config.php 
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

// กำหนดขอบเขตความห่างจากขอบ  กำหนดเพิ่มเติมในไฟล์  tcpdf_config.php 
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);

// กำหนดแบ่่งหน้าอัตโนมัติ
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

// กำหนดสัดส่วนของรูปภาพ  กำหนดเพิ่มเติมในไฟล์  tcpdf_config.php 
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);

// อนุญาตให้สามารถกำหนดรุปแบบ ฟอนท์ย่อยเพิมเติมในหน้าใช้งานได้
$pdf->setFontSubsetting(true);

// กำหนด ฟอนท์
$pdf->SetFont('thsarabun', '', 14, '', true);

// เพิ่มหน้า 
$pdf->AddPage();


ob_start();
?>

<div style="text-align: justify;">
ฟอนท์ ภาษาไทยสำหรับ tcpdf  
(ถ้าใครโหลดไฟล์จากด้านบนแล้ว จะมี font ภาษาไทยอยู่ด้วยไม่ต้องไปดาวน์โหลดใหม่) โดยชื่อที่เราจะเอาไปใช้และรองรับภาษาไทยมี
angsanaupccordiaupc thsarabun           
</div>

<?php
$html=ob_get_clean();
// เรียกใช้งาน ฟังก์ชั่นดึงข้อมูลไฟล์มาใช้งาน
//$html = curl_get("data2.php"); // path ไฟล์ 
// ภ้าทดสอบที่เครื่องก็ใช้ http://localhost/data_html.php

// สร้าง pdf ด้วยคำสั่ง writeHTMLCell()
$pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true);

// แสดงไฟล์ pdf
$pdf->Output('table_report.pdf', 'I');
?>


   เพิ่มเติมเนื้อหา ครั้งที่ 2 วันที่ 10-03-2017


อธิบายไฟล์ตัวอย่าง

 
test_list_table.php ไฟล์หลักที่ทำการสร้าง หรือ gen ไฟล์ pdf
data_html.php ไฟล์ html หรือข้อมูลที่ต้องการสร้าง pdf
 
ไฟล์ test_list_table.php จะไปทำการดึงข้อมูลจากไฟล์ data_html.php ด้วยคำสั่ง curl_get()
พอได้ข้อมูลมาแล้ว (จากตัวอย่างไฟล์ data_html.php ไฟล์) เป็นข้อมูล html 
 
$path_info = pathinfo($_SERVER['REQUEST_URI']);
$http = ($_SERVER['REQUEST_SCHEME'])?$_SERVER['REQUEST_SCHEME']."://":"http://";
$host = $_SERVER['SERVER_NAME'];
$pathDir = $path_info['dirname']."/";
$url = $http.$host.$pathDir;

// เรียกใช้งาน ฟังก์ชั่นดึงข้อมูลไฟล์มาใช้งาน
$html = curl_get($url."data_html.php"); // path ไฟล์ 
// ถ้าทดสอบบน server ใช้เป็น http://www.example.com/data_html.php
// ภ้าทดสอบที่เครื่องก็ใช้ http://localhost/data_html.php
 
$html คือตัวแปรที่เก็บข้อมูล html ที่ได้กลับมา
 
ถ้าเราไม่ต้องการดึงข้อมูล html จากไฟล์ เราสามารถ
กำหนดค่า html ในไฟล์ที่ทำการ gen pdf ได้เลย ดูตัวอย่างในหัวข้อ "เพิ่มเติมเนื้อหา" ด้านบน
 
 
จากนั้นนำไปสร้าง pdf ด้วยคำสั่ง
 
// สร้าง pdf ด้วยคำสั่ง writeHTMLCell()
$pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true);
 
แล้วก็นำไปแสดงผลด้วยคำสั่ง 
 
// แสดงไฟล์ pdf
$pdf->Output('table_report.pdf', 'I');
 
 
ในคำสั่ง Output() จะมีการรับค่า parameter 2 ตัว 
ตัวแรกคือชื่อไฟล์ กรณีมีการ save เป็นไฟล์ pdf
ตัวที่สองจะเป็นการกำหนดว่าจะแสดงไฟล์แบบไหน โดยมีค่าที่สามารถกำหนดได้ดังนี้
 
I: (i ตัวพิมพ์ใหญ่) ให้แสดงหน้าบราวเซอร์นั้นๆ โดยค่านี้จะเป็นค่า default ซึ่งถ้าบราวเซอร์สมันสนุนหรือมี
plugin ติดตั้งอยู่แล้ว ไฟล์ pdf ที่สร้างขึ้นก็จะแสดงที่บราวเซอร์ทันที ยกตัวอย่าง เช่น chrome 
D: ให้ทำการดาวน์โหลด หรือแจ้งให้ทำการดาวน์โหลด หลังจากทำการ gen pdf ไฟล์แล้ว 
ชื่อไฟล์ให้เป็นตามที่กำหนด
S: คืนค่าเป็นข้อมูล data ของ pdf ไฟล์ (ข้อมูลที่อ่านไม่ออก คล้ายข้อมูลของไฟล์) เราสามารถเอาข้อมูล
ไปสร้างเป็นไฟล์ทีหลัง (ปกติไม่ใช้งาน)
 
การกำหนดค่าเป็น I , D และ S ข้างต้น จะไม่มีการสร้างไฟล์ไว้ที่ server
 
F: บันทึกไฟล์ไว้บน server โดยชื่อไฟล์ เป็นตามชื่อที่กำหนด 
FI: บันทึกไฟล์ไว้บน server พร้อมทั้ง ให้แสดงหน้าบราวเซอร์นั้นๆ
FD: บันทึกไฟล์ไว้บน server พร้อมทั้ง ให้ทำการดาวน์โหลด หรือแจ้งให้ทำการดาวน์โหลด
 
การกำหนดค่าเป็น F, FI และ FD จะมีการสร้างไฟล์ไว้ที่ server 
ดังนั้น path หรือ โฟลเดอร์ ที่จะบันทึกไฟล์ ต้องกำหนด permission เป็น เป็น 755 หรือ 777
 






Tags:: ฐานข้อมูล report tcpdf




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

กรุณาล็อกอิน และลงชื่อติดตาม


สมัครสมาชิกได้ที่        ล็อกอินได้ที่   



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


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