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

เขียนเมื่อ 10 ปีก่อน โดย Ninenik Narkdee
report ฐานข้อมูล tcpdf สร้าง report

คำสั่ง การ กำหนด รูปแบบ ตัวอย่าง เทคนิค ลูกเล่น การประยุกต์ การใช้งาน เกี่ยวกับ report ฐานข้อมูล tcpdf สร้าง report

ดูแล้ว 33,484 ครั้ง




เนื้อหาเกี่ยวกับ การสร้าง report เป้น ไฟล์ pdf ด้วย tcpdf นี้
เดิมมีบทความเก่าอยู่แล้ว 
 
ประยุกต์สร้าง pdf ไฟล์ จาก tcpdf class ด้วย php รองรับภาษาไทย 
 
แต่คิดว่า ควรปรับมาใช้ เวอร์ชั่นที่ใหม่  และปัจจุบัน น่าจะดีกว่า
 
สามารรถดาวน์โหลดไฟล์ ตัวอย่างเบื้องต้น และไฟล์ที่เกี่ยวข้องได้ที่
 
ฟอนท์ ภาษาไทยสำหรับ tcpdf  
(ถ้าใครโหลดไฟล์ จากด้านบนแล้ว จะมี font ภาษาไทยอยู่ด้วย ไม่ต้องไปดาวน์โหลดใหม่)
โดยชื่อที่เราจะเอาไปใช้และรองรับภาษาไทยมี
angsanaupc
cordiaupc
thsarabun  
 
หรือถ้าใครอยากสร้าง font เฉพาะ ลองสร้างด้วยวิธีตามนี้ดู 
 
หลังจากโหลดไฟล์แล้ว จะมีรูปแบบไฟล์ตัวอย่างประกอบ
 
หรือสามารถทำตามได้ดังนี้
 
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 จากข้อมูลตารางนั้นๆ
 
ตัวอย่างไฟล์ที่สร้าง https://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
 


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


การส่งค่าตัวแปรไปยังไฟล์ที่สร้างข้อมูล HTML เพื่อใช้สร้างเป็น PDF

 
จากโค้ดในส่วนของการดึงข้อมูลจากไฟล์ 
 
// เรียกใช้งาน ฟังก์ชั่นดึงข้อมูลไฟล์มาใช้งาน
$html = curl_get($url."data_html.php"); // path ไฟล์ 
// ถ้าทดสอบบน server ใช้เป็น http://www.example.com/data_html.php
// ภ้าทดสอบที่เครื่องก็ใช้ http://localhost/data_html.php
 
จะเห็นว่าไปการไปเรียกไฟล์ data_html.php ที่มีการทำงานดึงข้อมูลหรือสร้างตารางรายการ
ที่ต้องการสร้างเป็นไฟล์ pdf โดยไม่มีการส่งค่าใดๆ เข้าไปใช้งาน แต่กรณีที่เราต้องการให้ค่าข้อมูล
ที่ดึงมาสร้างมีการเปลี่ยนแปลงไปตามค่าตัวแปรที่ส่งเข้าไป สมมติเช่น เราต้องการสร้างไฟล์ pdf ที่เป็น
รายการ invoice ใบกำกับสินค้า โดยขึ้นกับว่าเป็นใบกำกับสินค้าที่มี id ใดๆ เราก็สามารถส่งค่าตัวแปร GET
เข้าไปผ่านการเรียกใช้งานได้ดังตัวอย่างดังนี้
 
// เรียกใช้งาน ฟังก์ชั่นดึงข้อมูลไฟล์มาใช้งาน
$html = curl_get($url."data_html.php?invoiceID=1111"); // path ไฟล์ 
 
ดังนั้นในไฟล์ data_html.php ก็จะมีตัวแปร $_GET['invoice'] ที่มีค่าเท่ากับ 1111 ถูงส่งมาเพื่อนำไป
คิวรี่ดึงข้อมูลที่ตรงกับเงื่อนไขที่ต้องการ  
    จากตัวอย่างเบื้องต้น เรากำหนดค่าตัวแปรที่ต้องการส่งค่าแบบตายตัว แต่สมมติว่าเราต้องการส่งค่าแบบ
ให้เป็นไปตามค่าที่ส่งมาอีกทีจะทำอย่างไร โดยถ้าให้ไฟล์ที่สร้าง pdf ของเราชื่อ genpdf.php และเราต้องการ
ส่งตัวแปร invoiceID เข้าไปในไฟล์ genpdf.php เพื่อไปใช้งานต่อในการดึงข้อมูลจากไฟล์ data_html.php
ผ่านการเรียกใช้งาน genpdf.php?invoiceID=111  ดังนั้นในส่วนของการดึงข้อมูลไฟล์ที่สร้างข้อมูลก็จะได้เป็น
 
// เรียกใช้งาน ฟังก์ชั่นดึงข้อมูลไฟล์มาใช้งาน
if(isset($_GET['invoiceID']) && $_GET['invoiceID']!=""){
	$html = curl_get($url."data_html.php?invoiceID=".$_GET['invoiceID']); // path ไฟล์ 
}else{
	$html="";	
}


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


หากต้องการใช้งานฟอนท์ อื่นๆ เราสามารถแปลงไฟล์ฟอนท์ ttf สำหรับ tcpdf ได้ที่
 

 
ลากไฟล์ฟอนท์ ttf ที่ต้องการไปยังตำแหน่งดังรูป

 
 

 
คลิกเลือก I have rights to convert this font แล้ว 
เราจะได้ไฟล์ 3 ไฟล์ ให้เราดาวน์โหลด แล้ว copy ไปไว้ในโฟลเดอร์ tcpdf > fonts 
ทั้ง 3 ไฟล์ 
FamilyName: thsarabunnew คือชื่อฟอนท์ที่เราจะเอาไปใช้งาน
 


 
 
ตัวอย่างใช้งานฟอนท์ thsarabunnew ที่แปลงจากเว็บข้างต้น และเรียกใช้งานใน tcpdf

 
 


 


   เพิ่มเติมเนื้อหา ครั้งที่ 5 วันที่ 26-02-2020


ดาวน์โหลด Google Thai Font for TCPDF เฉพาะ regular style

http://bit.ly/2VjjMLj


ชื่อฟอนท์ ที่จะใช้กำหนด 
  • athiti
  • baijamjuree
  • chakrapetch
  • charmi
  • charmonmani
  • chonburi
  • fahkwang
  • itim
  • k2d
  • kanit
  • kodchasan
  • koho
  • krub
  • maitree
  • mali
  • mitr
  • niramit
  • pattayai
  • pridi
  • prompt
  • sarabun
  • srirachai
  • srisakdii
  • taviraj
  • thasadith
  • trirong


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



อ่านต่อที่บทความ









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






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

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

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

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



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




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





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

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


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


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







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