PHP Ionic Angularjs Phonegap AJAX Javascript CSS MySQL jQuery Forum


จัดรูปแบบ header และ footer ของ pdf แบบกำหนดเองใน tcpdf

26 June 2017 By
tcpdf จัดรูปแบบ header และ footer


เพื่อไม่ให้สับสนกับการใช้งานในเนื้อที่จะกล่าวถึงต่อไปนี้ สำหรับใครที่ยังไม่ได้อ่านรายละเอียด
บทความที่เกี่ยวข้องที่ผ่านมา สามารถไปทำความเข้าใจเพิ่มเติมกันก่อนได้ที่ลิ้งค์ด้านล่าง
 
แนวทางจัดรูปแบบ header และ footer ของ pdf ไฟล์ที่สร้างด้วย tcpdf 
http://www.ninenik.com/content.php?arti_id=803 via @ninenik
 
เมื่อเราได้ทำความรู้จักกับการจัดรูปแบบของ header และ footer ของ pdf โดยยึดตามค่าเริ่มต้น
ที่มีมาให้แล้ว  ในเนื้อหาในตอนต่อไปนี้ เราจะมาประยุกต์เพิ่มเติม โดยจะไม่อิงรูปแบบจากค่าเริ่มต้น 
นั่นคือ เราสามารถที่จะกำหนดส่วนของ header และ footer ในตำแหน่งหรือรูปแบบที่เราต้องการ 
ตามความสามารถของ tcpdf จะทำได้  
 

การกำหนดการจัดการ header และ footer แบบกำหนดเอง

วิธีการคือ เดิมเรามีการเรียกใช้งาน TCPDF class ในการสร้างเอกสาร pdf ด้วยคำสั่ง
 
// เริ่มสร้างไฟล์ pdf
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
 
เพื่อให้สามารถกำหนดรูปแบบการสร้าง header และ footer เองได้เราจึงจำเป็นต้องทำการสืบทอด TCPDF class
เพื่อกำหนดชื่อ class ใหม่ และสร้างฟังก์ชั่นจัดการส่วนต่างๆ เป็นดังนี้
 
// สร้าง MYPDF class สืบทอดจาก TCPDF class เพื่อสร้างรูปแบบ header และ footer 
class MYPDF extends TCPDF {
    //ส่วนจัดการ header
    public function Header() {

    }
    // ส่วนจัดการ footer
    public function Footer() {

    }
}

// เริ่มสร้างไฟล์ pdf เปลี่ยนจาก TCPDF เป็น MYPDF
$pdf = new MYPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
 
 
เท่านี้เราก็ได้ส่วนของการจัดการ header และ footer แบบกำหนดเอง ขึ้นมาพร้อม
ใช้งานแล้ว
 
เรามาสร้างไฟล์ตั้งต้น สำหรับใช้งานกัน สมมติไฟล์เราชื่อ mytest_pdf.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 

// สร้างฟังก์ชั่นสำหรับใช้งานเพิ่มเติม
// ฟังกืชั่นแปลงค่าสีในรูปแบบเลขฐาน 16 เป็นในรูปแบบ RGB
function _hex2rgb($color){
    $color = str_replace('#', '', $color);
    if (strlen($color) != 6){ return array(0,0,0); }
    $rgb = array();
    for ($x=0;$x<3;$x++){
        $rgb[$x] = hexdec(substr($color,(2*$x),2));
    }
    return $rgb;
}
// สร้างฟังก์ชั่นสำหรับแปลงค่า เพื่อใช้งาน tcpdf
// [px=pixel, pt=point, mm=millimeter, cm=centimeter, in=inch].
// การใช้งาน เช่น _conversion(20,'px-pt'); เป็นต้น
function _conversion($val,$unitCV){
	$unitCV=strtolower($unitCV);
	$arrFactor=array(
	"px-cm"=>0.02645833,"px-mm"=>0.264583,"px-in"=>0.01041667,"px-pt"=>0.75,
	"cm-px"=>37.795276,"cm-mm"=>10,"cm-in"=>0.393701,"cm-pt"=>28.346457,
	"mm-cm"=>0.1,"mm-px"=>3.779528,"mm-in"=>0.03937008,"mm-pt"=>2.834646,
	"in-cm"=>2.54,"in-mm"=>25.4,"in-px"=>96,"in-pt"=>72,
	"pt-cm"=>0.03527778,"pt-mm"=>0.352778,"pt-in"=>0.01388889,"pt-px"=>1.333333,
	);
	return $val * $arrFactor[$unitCV];
}

// สร้าง MYPDF class สืบทอดจาก TCPDF class เพื่อสร้างรูปแบบ header และ footer 
class MYPDF extends TCPDF {
    //ส่วนจัดการ header
    public function Header() {

    }
    // ส่วนจัดการ footer
    public function Footer() {

    }
}

// เริ่มสร้างไฟล์ pdf เปลี่ยนจาก TCPDF เป็น MYPDF
$pdf = new MYPDF(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');

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

// กำหนดตัวแปรค่าคงที่สำหรับการจัดค่าหน้ากระดาษ
define('MYPDF_MARGIN_LEFT',_conversion(3,'cm-mm'));
define('MYPDF_MARGIN_TOP',_conversion(2,'cm-mm'));
define('MYPDF_MARGIN_RIGHT',_conversion(2.5,'cm-mm'));
define('MYPDF_MARGIN_HEADER',0);
define('MYPDF_MARGIN_FOOTER',0);
// กำหนดขอบเขตความห่างจากขอบ  กำหนดเพิ่มเติมในไฟล์  tcpdf_config.php 
$pdf->SetMargins(MYPDF_MARGIN_LEFT, MYPDF_MARGIN_TOP, MYPDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(MYPDF_MARGIN_HEADER);
$pdf->SetFooterMargin(MYPDF_MARGIN_FOOTER);

// กำหนดตัวแปรค่าคงที่การชิดขอบด้านล่างของเนื้อหา
define('MYPDF_MARGIN_BOTTOM',_conversion(2,'cm-mm'));
// กำหนดแบ่่งหน้าอัตโนมัติ
$pdf->SetAutoPageBreak(TRUE, MYPDF_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');
?>
 
โดยในไฟล์ตั้งต้น เราจะกำหนดการตั้งค่าหน้ากระดาษให้เนื้อหา ขยับออกจากขอบทั้งสี่ที่ความยาว 2 cm
ผลลัพธ์ที่ได้จะเป็นดังรูป
 
 

 
 

 
 
ดังนั้น เราจะมีพื้นที่ในการจัดการส่วน header จากขอบบนสุด จนถึงส่วนของเนื้อหา
และมีพื้นที่ในการจัดการส่วนของ footer จากขอบล่างสุด จนถึงส่วนของเนื้อหา
 

ฟังก์ชั่นคำสั่งในการจัดการเนื้อหาข้อความและรูปภาพ

ก่อนที่เราจะเริ่มส่วนของเนื้อหาข้อมูล header และ footer เราจำเป็นต้องรู้จักคำสั่งที่ใช้ในการจัดการ
รูปภาพ และเนื้อหากันก่อน ดังนี้
 

คำสั่งในการจัดการรูปภาพ มีรูปแบบเป็นดังนี้

Image( $file, $x = '', $y = '', $w = 0, $h = 0, $type = '', $link = '', $align = '', $resize = false, $dpi = 300, $palign = '', $ismask = false, $imgmask = false, $border = 0, $fitbox = false, $hidden = false, $fitonpage = false, $alt = false, $altimgs = array() )
 
ใช้สำหรับใส่รูปภาพลงไปใน page โดยในการใช้งานต้องกำหนดตำแหน่งจากมุมบนซ้ายเสมอ 
ส่วนขนาดของรูปภาพสามารถกำหนดค่าได้หลายรูปแบบ เช่น
- การกำหนดค่าความกว้าง และความสูงของรูปได้โดยตรงตามค่าหน่วยที่กำหนด
- หรือจะกำหนดค่าใดค่าหนึ่ง เช่น กำหนดแค่ความกว้าง ส่วนความสูงระบบจะทำการคำนวณค่าอัตโนมัติ
เพื่อให้รูปภาพแสดงออกมาได้อย่างเป็นสัดส่วน และในทำนองเดียวกับกรณีกำหนดแค่ความสูงอย่างเดียว
- กรณีรูปที่ใช้งานมีความละเอียดอยู่ที่ 72 dpi เราไม่จำเป็นต้องกำหนดความกว้างหรือความสูงก็ได้
 
ประเภทของไฟล์ที่รองรับได้แก่ JPEG และ PNG กรณีไม่มีการใช้งาน GD ไลบรารี่ ของ php
แต่ถ้ามีการใช้งาน GD จะรองรับไฟล์รูปภาพทั้งหมด เช่น GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM
เป็นต้น สามารถกำหนดประเภทของไฟล์หรือไม่ก็ได้ กรณีไม่กำหนด จะใช้จากนามสกุลของไฟล์
 
สามารถกำหนดลิ้งค์ให้กับรูปภาพได้
หมายเหตุ: ถ้ามีการใช้งานรูปภาพเดิม หลายครั้ง จะมีการฝังรูปภาพนั้นๆ ไว้ในไฟล์เพียงรูปเดียวเท่านั้น
 

การกำหนดค่า Parameters

 
$file
ชื่อของไฟล์รูปภาพ หรือจะใช้สัญลักษณ์ '@' แล้วตามด้วยข้อมูลข้อความรูปภาพ
ในกรณีไม่ต้องการฝังรูปภาพในไฟล์ pdf สามารถกำหนด '*' ไว้ก่อน url ของรูปภาพได้ ตัวอย่างเช่น
'*http://www.example.com/image.jpg'
$x
ตัวเลข ระยะจากด้านซ้าย
$y
ตัวเลข ระยะจากด้านบน
$w
ตัวเลข ความกว้างของรูป ถ้าไม่กำหนดหนดค่า หรือกำหนดเท่ากับ 0 ค่าจะถูกคำนวณอัตโนมัติ
$h
ตัวเลข ความสูงของรูป ถ้าไม่กำหนดหนดค่า หรือกำหนดเท่ากับ 0 ค่าจะถูกคำนวณอัตโนมัติ
$type
ข้อความ ประเภทของรูปภาพ ใช้ตัวเล็กหรือตัวใหญ่่ก็ได้ 
ประเภทของไฟล์ที่รองรับได้แก่ JPEG และ PNG กรณีไม่มีการใช้งาน GD ไลบรารี่ ของ php
แต่ถ้ามีการใช้งาน GD จะรองรับไฟล์รูปภาพทั้งหมด เช่น GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM
เป็นต้น สามารถกำหนดประเภทของไฟล์หรือไม่ก็ได้ กรณีไม่กำหนด จะใช้จากนามสกุลของไฟล์
$link
กำหนด url ลิ้งค์ให้กับรูปภาพ หรือกำหนดโดยใช้ค่าจากคำสั่ง AddLink() เพื่อไปยังส่วนต่างๆ
ของเอกสาร pdf ตามต้องการ
$align
กำหนดตำแหน่งการแสดงของข้อมูลถัดจากรูปที่ถูกแทรก โดยตำแหน่งจะสัมพันธ์กับความสูงของรูป
โดยสามารถกำหนดค่าเป็น
T: ชิดขอบมุมบนขวาของรูปภาพ
M: ชิดขอบขวาตรงกลางของรูปภาพ
B: ชิดขอบขวามุมล่างของรูปภาพ
หรือ N เพื่อขึ้นบรรทัดใหม่ถัดจากรูป
ดูรูปภาพประกอบ ตามด้านล่าง
$resize
กำหนดให้ทำการปรับขนาดของรูปหรือไม่ 
การปรับขนาดในที่นี้คือ ปรับขนาดรูปที่แนบมากับไฟล์ pdf จะต่างการจากกำหนดความกว้าง ความสูงปกติ
ค่าที่กำหนดใน $resize ได้แก่ 
true: ลดขนาดตามสัดส่วนของ $w และ $h (จำเป็นต้องมีการใช้งาน GD library)
false: ไม่ต้องลดขนาดรูป
2: บังคับให้มีการปรับขนาดทั้งการลดขนาดหรือเพิ่มขนาดของรูป
$dpi
การกำหนดความละเอียดที่จะใช้กรณีมีการใช้งานลดขนาด เช่น 300 
$palign
กำหนดการแสดงตำแหน่งของรูปในบรรทัดนั้นๆ เช่น
L : ชิดซ้าย
C : อยู่ตรงกลางบรรทัด
R : ชิดขวา
'' : กรณีกำหนดเป็นค่าว่า จะหมายถึงชิดซ้ายหรือขวา แล้วแต่ว่าเป็นรูปแบบการใช้งานจาก 
ซ้ายไปขวา LTR หรือขวาไปซ้าย RTL
$ismask
กำหนดการปกปิดหรือปิดบังรูปหรือไม่ 
true ถ้าต้องการปิดบังรูปนี้ ค่าเริ่มต้นเป็น false คือแสดงรูปปกติ
$imgmask
กำหนดการคืนค่า image object หรือ ค่า false ไม่คืนค่า
$border
กำหนดขอบให้กับรูปภาพ โดยสามารถกำหนดค่าเป็นตัวเลข
0: ไม่มีขอบ (ค่าเริ่มต้น)
1: มีขอบทั้งสี่ด้าน
หรือ ข้อความสัญลักษณ์ได้ดังนี้
L: มีขอบซ้าย
T: มีขอบบน
R: มีขอบขวาright
B: มีขอบด้านล่าง
หรือใช้แบบคล้ายค่่า เช่น LTR มีขอบซ้ายบนและขวา ไม่มีขอบล่าง
หรือกำหนดเป็น array ของ เส้นขอบแบบกำหนด style เช่น
array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)))
$fitbox
ใช้กำหนดขนาดของรูปในกล่อง
ถ้าเป็นค่า false ขนาดรูปจะแสดงเป็นไปตามสัดส่วนในตามขนาดของกล่องที่กำหนดค่า $w และ $h
หรือกำหนดค่าเป็น true หรือ ตัวอักษรสองตัวเพื่อระบุการจัดตำแหน่งในกล่อง
ค่าแรกจะเป็นการจัดในแนวนอน ได้แก่  (L = left, C = center, R = right) 
ค่าที่สองจะเป็นการจัดในแนวตั้ง ได้แก่ (T = top, M = middle, B = bottom)
ตัวอย่างการกำหนด ก็เช่น 'LT' เป็นต้น
$hidden
กำหนดการไม่แสดงรูป ถ้าเป็น true รูปจะไม่มีการใช้งานและแสดงรูป
ค่าเริ่มต้นเป็น false คือแสดงรูป
$fitonpage
ถ้ามีการปรับขนาดของรูป กำหนดให้รูปมีขนาดเกินขนาดของเอกสารหรือไม่
ถ้าเป็น true รูปที่มีการปรับขนาด จะมีขนาดไม่เกินขนาดของเอกสาร pdf
ปกติถ้าไม่มีการปรับขนาดรูป ค่าจะใช้เป็น false เป็นค่าเริ่มต้น
$alt
กำหนดรูปว่าเป็นรูปภาพทางเลือกหรือไม่ โดยที่รูปจะไม่มีการแสดงผลออกมา 
โดยถ้ากำหนดเป็น true รูปนี้จะเป็นรูปภาพทางเลือก รูปจะถูกซ่อนไม่แสดง แต่จะมีการคืนค่า
ID ของรูปไว้ใช้งาน
ค่าเริ่มต้นเป็น false คือแสดงรูปปกติ ไม่ใช้รูปภาพทางเลือก
$altimgs
กำหนดการเลือกใช้งานรูปภาพทางเลือก ค่าเริ่มต้นคือ false ไม่มีการใช้งานรูปภาพทางเลือก
แต่ถ้ามีการใช้งาน จะกำหนดเป็นค่า array โดยมีค่าสองค่า 
ค่าแรกเป็นตัวเลข ของ ID รูปภาพที่เราได้จากการใช้คำสั่ง Image() 
ค่าที่สองจะเป็นการกำหนดค่าว่าจะให้รูป ID นั้นแสดงหรือไม่ โดยเป็นค่า true หรือ false
ตัวอย่าง เช่น array(1,true) เป็นต้น.
 

ตัวอย่างการใช้งาน Image()

ปกติการใช้งาน เราไม่จำเป็นต้องส่งค่า parameter ทุกตัว แต่เลือกใช้หรือกำหนดค่าบางค่าได้
บางค่าอาจจะใช้เป็นค่าว่าง หรืออาจจะใช้ค่าเริ่มต้นก็ได้ 
 
// กรณีเรียกใช้ในฟังก์ชั่นอื่นๆ
$image_file = K_PATH_IMAGES.'logo_example.jpg';
$this->Image($image_file, 10, 10, 15, '', 'JPG', '', 'T', false, 300, '', false, false, 0, false, false, false);

// กรณีเรียกใช้ผ่าน class โดยตรง
$image_file = K_PATH_IMAGES.'logo_example.jpg';
$pdf->Image($image_file, 10, 10, 15, '', 'JPG', '', 'T', false, 300, '', false, false, 0, false, false, false);
 
 
 

คำสั่งที่ใช้ในการจัดการข้อความ มีรูปแบบดังนี้

Cell( $w, $h = 0, $txt = '', $border = 0, $ln = 0, $align = '', $fill = false, $link = '', $stretch = 0, $ignore_min_height = false, $calign = 'T', $valign = 'M' )
 
ใช้แสดงข้อมูลในพื้นที่กล่องสี่เหลี่ยม สามารถกำหนดการแสดงขอบ สีพื้นหลัง และตัวอักษรข้อความ
มุมบนสุดด้านซ้ายของกล่องข้อความจะสัมพันธ์กับตำแหน่งปัจจุบัน ข้อความสามารถจัดวางในตำแหน่งต่างๆ
หรือแสดงตรงกลางได้ หลังจากมีการเรียกใช้คำสั่ง Cell() ตำแหน่งปัจจุบันจะเคลื่อนไปทางขวาหรือขึ้นบรรทัดใหม่
สามารถกำหนดลิ้งค์ให้กับข้อความได้
ถ้ามีการกำหนดให้ขึ้นหน้าใหม่อัตโนมัติ และกล่องข้อความมีขนาดเกินค่าที่จำกัดไว้ การแบ่งหน้าจะทำงานก่อน
ที่จะแสดงผลข้อมูลออกมา
 

การกำหนดค่า Parameters

 
$w
กำหนดความกว้าง ถ้าเป็น 0 ความกว้างจะขยายไปจนสุด ถึงตำแหน่งการเยื้องจากฝั่งขวา
$h
กำหนดความสูง ค่าเริ่มต้นเป็น 0
$txt
กำหนดข้อความทีต้องการแสดง ค่าเริ่มต้นเป็นค่าว่าง
$border
กำหนดขอบ โดยสามารถกำหนดค่าเป็นตัวเลข
0: ไม่มีขอบ (ค่าเริ่มต้น)
1: มีขอบทั้งสี่ด้าน
หรือ ข้อความสัญลักษณ์ได้ดังนี้
L: มีขอบซ้าย
T: มีขอบบน
R: มีขอบขวาright
B: มีขอบด้านล่าง
หรือใช้แบบคล้ายค่่า เช่น LTR มีขอบซ้ายบนและขวา ไม่มีขอบล่าง
หรือกำหนดเป็น array ของ เส้นขอบแบบกำหนด style เช่น
array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)))
$ln
กำหนดว่าหลังเรียกใช้คำสั่ง Cell() นี้แล้ว ต้องการให้ตำแหน่งปัจจุบัน
อยู่ที่ตำแหน่งใด ค่าเริ่มต้นเป็น 0
0: ให้ต่อไปทางด้านขวา 
1: ให้ขึ้นบรรทัดใหม่รอ
2: ให้ต่อด้านล่างข้อความ
การกำหนดค่าเท่ากับ 1 จะมีค่าเหมือนกับการกำหนดค่าเท่ากับ 0 แล้วเรียกใช้คำสั่ง Ln() ต่อท้าย
$align
กำหนดการวางตำแหน่งของข้อความ 
L หรือ ค่าว่าง กำหนดให้ชิดซ้าย
C: กำหนดให้แสดงตรงกลาง
R: กำหนดให้แสดงขิดขวา
J: กำหนดให้แสดงเต็มพื้นที่
$fill
การกำหนดว่าจะมีการใช้สีพื้งหลังหรือไม่ 
true ถ้ามีการใช้สีพื้นหลัง
false ถ้าต้องการให้โปร่งใส
$link
กำหนด url ลิ้งค์หรือ ตำแหน่งในเอกสารด้วยคำสั่ง AddLink()
$stretch
การกำหนดให้ตัวอักษรยืดออก
0 = ไม่ใช้งาน
1 = ให้ยืดออกแนวนอน ปรับขนาดถ้าข้อความยาวกว่าความยาวของ
พื้นที่กล่องข้อความเท่านั้น
2 = บังคับให้ยืดออกในแนวนอน ขยายให้เต็มพื้นที่ของกล่องข้อความ
3 = ยึดออกเฉพาะช่องว่าง ถ้าข้อความมีขนาดยาวกว่าพื้นที่กล่องข้อความ
4 = บังคับให้ช่องว่างยืดออกขยายให้เติมพื้นที่ของกล่องข้อความ
โดยทั่วไปแล้วตัวอักษรจะยืดออกและค่าการปรับขนนาดจะคงเดิมถ้าเป็นไปได้
$ignore_min_height
กำหนดการใช้ค่าความสูงขั้นต่ำสุด อัตโนมัติ
true คือไม่ใช้ค่าความสูงตำสด
false คือใช้ค่าความสูงตำสุด อัตโนมัติ
$calign
กำหนดการจัดตำแหน่งแนวตั้งของกล่องข้อความอ้างอิงกับค่าในแนวแกน Y 
T : ชิดขอบมุมบนซ้ายของกล่อง
C : ชิดขอบตรงกลางกล่องของกล่อง
B : ชิดขอบมุมล่างซ้ายของกล่อง
A : ชิดขอบขวาตำแหน่งด้านบนของข้อความ
L :  ชิดขอบขวาตำแหน่งเดียวกับข้อความ
D :  ชิดขอบขวาตำแหน่งด้นล่างของข้อความ
$valign
กำหนดการจัดตำแหน่งในแนวตั้งของข้อความในกล่อง
T : ชิดขอบบนของกล่อง
C : ตรงกลางกล่อง
B : ชิดขอบล่างของกล่อง
 

ตัวอย่างการใช้งาน Cell()

ปกติการใช้งาน เราไม่จำเป็นต้องส่งค่า parameter ทุกตัว แต่เลือกใช้หรือกำหนดค่าบางค่าได้
บางค่าอาจจะใช้เป็นค่าว่าง หรืออาจจะใช้ค่าเริ่มต้นก็ได้ 
 
// กรณีเรียกใช้ในฟังก์ชั่นอื่นๆ
$this->Cell(0, 15, 'ข้อความที่จะแสดง', 0, false, 'C', 0, '', 0, false, 'M', 'M');

// กรณีเรียกใช้ผ่าน class โดยตรง
$pdf->Cell(0, 15, 'ข้อความที่จะแสดง', 0, false, 'C', 0, '', 0, false, 'M', 'M');
 
 

คำสั่งที่ในการกำหนดสีพื้นหลัง ใช้รูปแบบดังนี้

SetFillColor( $col1 = 0, $col2 = -1, $col3 = -1, $col4 = -1, $ret = false, $name = '' )
// หรือ
SetFillColorArray( $color, $ret = false )
 

การกำหนดค่า Parameters

 
$col1 : ระดับค่าสี GRAY กรณีเป็นขาวดำ หรือ สีแดงของค่า RGB(0-255) หรือค่าสี CYAN ของค่า CMYK (0-100).
$col2 : ระดับสีเขียวของค่า RGB(0-255) หรือค่าสี MAGENTA ของค่า CMYK (0-100).
$col3 : ระดับสีน้ำเงินของค่า RGB (0-255) หรือค่าสี YELLOW ของค่า CMYK (0-100).
$col4 : ค่าสีดำ ของค่า CMYK (0-100).
ค่าสีในรูปแบบ RGB คือค่าสีที่ใช้แสดงผลทางจอภาพ
ส่วนค่าสีในรูปแบบ CMYK คือค่าสีที่ใช้สำหรับการพิมพ์ออกเป็นเอกสารกระดาษ
$color
เป็นค่า array ของค่าสี กำหนดคล้ายกับค่า parameter ด้านบนที่กล่าวมาแล้ว แต่จัดให้อยู่ใน
รูปแบบ array เช่น array($col1,$col2,$col3,$col4)
$ret
ถ้าเป็น true คือไม่ต้องส่งคำสั่งการทำงาน ค่าเริ่มต้นเป็น false
$name
ชื่อสีสำหรับ spot 
 
ในที่นี้เราสามารถประยุกต์ใช้กำหนดค่าสี แบบนี้แทนได้
 
call_user_func_array(array($this,'SetFillColor'), _hex2rgb('#A349A4'));
// หรือ
$this->SetFillColorArray(_hex2rgb('#A349A4'));
 

ตัวอย่างการใช้งาน SetFillColor() หรือ SetFillColorArray()

ปกติการใช้งาน เราไม่จำเป็นต้องส่งค่า parameter ทุกตัว แต่เลือกใช้หรือกำหนดค่าบางค่าได้
บางค่าอาจจะใช้เป็นค่าว่าง หรืออาจจะใช้ค่าเริ่มต้นก็ได้ 
 
// กรณีเรียกใช้ในฟังก์ชั่นอื่นๆ
$this->SetFillColor(255, 255, 127);
$this->SetFillColorArray(array(255, 255, 127));
// หรือ กำหนดแบบใช้ค่าสีแปลงเป็น RGB ด้วยฟังก์ชั่นคำสั่ง _hex2rgb()
call_user_func_array(array($this,'SetFillColor'), _hex2rgb('#A349A4'));
$this->SetFillColorArray(_hex2rgb('#A349A4'));

// กรณีเรียกใช้ผ่าน class โดยตรง
$pdf->SetFillColor(255, 255, 127);
$pdf->SetFillColorArray(array(255, 255, 127));
// หรือ กำหนดแบบใช้ค่าสีแปลงเป็น RGB ด้วยฟังก์ชั่นคำสั่ง _hex2rgb()
call_user_func_array(array($pdf,'SetFillColor'), _hex2rgb('#A349A4'));
$pdf->SetFillColorArray(_hex2rgb('#A349A4'));
 

คำสั่งที่ใช้ในการกำหนดสีของข้อความหรือฟอนท์ ใช้รูปแบบคำสั่งดังนี้

SetTextColor( $col1 = 0, $col2 = -1, $col3 = -1, $col4 = -1, $ret = false, $name = '' )
// หรือ
SetTextColorArray( $color, $ret = false )
 
การกำหนด parameter และรูปแบบการใช้งาน จะเหมือนกับคำสั่งในการเติมสีพื้นหลัง
SetFillColor() และ SetFillColorArray() ที่ได้กล่าวไปแล้ว
 
 

คำสั่งที่ใช้ในการกำหนดฟอนท์  ใช้รูปแบบดังนี้

SetFont( $family, $style = '', $size = null, $fontfile = '', $subset = 'default', $out = true )
 

การกำหนดค่า Parameters

$family 
ชื่อของฟอนท์ที่เราจะใช้งาน
$style 
กำหนดรูปแบบการแสดงของข้อความ เป็นค่าต่างๆ ได้ดังนี้
'' : เป็นค่าว่าง แสดงข้อความปกติ
B : แสดงตัวหนา
I : แสดงตัวเอียง
U : แสดงแบบมีขีดเส้นใต้
D : แสดงแบบมีเส้นขีดทับ
O : แสดงแบบมีเส้นขีดอยู่เหนือข้อความ
นอกจากนั้น เราสามารถกำหนดรวมกันได้ เช่น BI คือแสดงเป็นตัวหนาและเป็นตัวเอียง
สำหรับบางฟอนท์ การกำหนดตัวหนาและตัวเอียงอาจจะไม่รองรับ 
ถ้าไม่กำหนด หรือเป็นค่าว่าง จะแสดงเป็นข้อความปกติ
$size
กำหนดขนาดของตัวอักษร มีหน่วนเป็น pt (point)
$fontfile
การกำหนดชื่อของไฟล์ฟอนท์ ค่าเริ่มต้น ชื่อไฟล์จะกำหนดจากชื่อฟอนท์กับลักษณะของฟอนท์
ในรูปแบบตัวพิมพ์เล็กและไม่มีช่องว่าง ปกติส่วนนี้จะไม่ต้องกำหนด
$subset
การกำหนดฟอนท์ตัวห้อย ถ้ากำหนดเป็น true ให้มีการแนบเฉพาะฟอนท์ที่เป็นตัวห้อย หรือถ้า
กำหนดเป็น false ให้แนบทั้งหมด หรือถ้าเป็น default คือให้ใช้การตั้งค่าใน คำสั่ง setFontSubsetting()
การตั้งค่าในส่วนนี้ใช้ได้เฉพาะฟอนท์ที่เป็น TrueTypeUnicode 
$out
กำหนดให้ใช้คำสั่งการกำหนดขนาดฟอนท์ หรือ false ถ้าต้องการกำหนดลักษณะฟอนท์เท่านั้น
 

ตัวอย่างการใช้งาน SetFont() 

ปกติการใช้งาน เราไม่จำเป็นต้องส่งค่า parameter ทุกตัว แต่เลือกใช้หรือกำหนดค่าบางค่าได้
บางค่าอาจจะใช้เป็นค่าว่าง หรืออาจจะใช้ค่าเริ่มต้นก็ได้ 
 
// กรณีเรียกใช้ในฟังก์ชั่นอื่นๆ
$this->SetFont('thsarabun', 'BI', 14, '', true);

// กรณีเรียกใช้ผ่าน class โดยตรง
$pdf->SetFont('thsarabun', 'BI', 14, '', true);
 
 
 
ตอนนี้เราได้รู้จักคำสั่งต่างๆ ที่จำเป็นเบื้องต้น ในการนำไปใช้งานกำหนดการจัดว่างส่วนต่างๆ
ให้กับ header และ footer แล้ว ต่อไป เราจะมาดูตัวอย่าง และแนวทางการใช้งานกัน
โดยจะแสดงเฉพาะโค้ดส่วนของฟังก์ชั่น Header() และ Footer() และหน้าตาผลลัพธ์ที่ได้
ก่อนอื่นขอกำหนดขนาดการตั้งค่าหน้ากระดาษเป็นดังนี้ เพื่อให้เห็นภาพ
 
 
// กำหนดตัวแปรค่าคงที่สำหรับการจัดค่าหน้ากระดาษ
define('MYPDF_MARGIN_LEFT',_conversion(2,'cm-mm'));
define('MYPDF_MARGIN_TOP',_conversion(4,'cm-mm'));
define('MYPDF_MARGIN_RIGHT',_conversion(2,'cm-mm'));
define('MYPDF_MARGIN_HEADER',0);
define('MYPDF_MARGIN_FOOTER',0);
// กำหนดขอบเขตความห่างจากขอบ  กำหนดเพิ่มเติมในไฟล์  tcpdf_config.php 
$pdf->SetMargins(MYPDF_MARGIN_LEFT, MYPDF_MARGIN_TOP, MYPDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(MYPDF_MARGIN_HEADER);
$pdf->SetFooterMargin(MYPDF_MARGIN_FOOTER);

// กำหนดตัวแปรค่าคงที่การชิดขอบด้านล่างของเนื้อหา
define('MYPDF_MARGIN_BOTTOM',_conversion(4,'cm-mm'));
// กำหนดแบ่่งหน้าอัตโนมัติ
$pdf->SetAutoPageBreak(TRUE, MYPDF_MARGIN_BOTTOM);
 
ผลที่ได้ 
 

 
 

 
 
เราต้องการให้มีพื้นที่สำหรับทดอบการแสดงผล จึงทำการกำหนดการตั้งค่าหน้ากระดาษ ให้ ส่วนของเนื้อหา
ห่างจากขอบด้านซ้าย และขวา 2 cm และห่างจากขอบบน และล่าง 4 cm ดังรูปด้านบน
 
 
รูปแบบการจัดส่วนของ Header แบบที่ 1
 
//ส่วนจัดการ header
public function Header() {
	// Logo
	$image_file = K_PATH_IMAGES.'tcpdf_logo.jpg';
	$this->Image($image_file,0,_conversion(0.5,'cm-mm'),
	0,_conversion(1,'cm-mm'),'',''
	,'N',false,300,'C',false,false,'',false,false,false);			
	$this->SetFillColorArray(_hex2rgb('#A349A4'));
	$this->SetTextColorArray(_hex2rgb('#FFFFFF'));	
	$this->SetFont('thsarabun', 'BU', _conversion(30,'px-pt'), '', true);				
	$this->Cell(0,_conversion(1,'cm-mm'),'ทดสอบการแสดงหัวเรื่องภาษาไทยตรงกลาง',
	0,1,'C',true,'',0,false,'T','T');
	$this->SetFillColorArray(_hex2rgb('#FFF200'));
	$this->SetTextColorArray(_hex2rgb('#000000'));	
	$this->SetFont('thsarabun', '', _conversion(18,'px-pt'), '', true);			
	$this->Cell(0,_conversion(0.5,'cm-mm'),'ทดสอบการแสดงหัวเรื่องย่อยภาษาไทยตรงกลาง',
	0,1,'C',true,'',0,false,'T','T');		
	$this->SetFillColorArray(_hex2rgb('#EFE4B0'));		
	$this->SetTextColorArray(_hex2rgb('#000000'));	
	$this->SetFont('thsarabun', '', _conversion(18,'px-pt'), '', true);			
	$this->Cell(0,_conversion(0.5,'cm-mm'),'ทดสอบการแสดงหัวเรื่องย่อยภาษาไทยชิดซ้าย',
	0,1,'L',true,'',0,false,'T','T');				
}
 
ผลลัพธ์
 
 
 
 
รูปแบบการจัดส่วนของ Header แบบที่ 2
//ส่วนจัดการ header
public function Header() {
	// Logo
	$image_file = K_PATH_IMAGES.'tcpdf_logo.jpg';
	$this->Image($image_file,0,_conversion(1,'cm-mm'),
	0,_conversion(1,'cm-mm'),'',''
	,'N',false,300,'C',false,false,'',false,false,false);			
	$this->SetFillColorArray(_hex2rgb('#FFF200'));
	$this->SetTextColorArray(_hex2rgb('#000000'));	
	$this->SetFont('thsarabun', '', _conversion(18,'px-pt'), '', true);			
	$this->Cell(_conversion(250,'px-mm'),_conversion(0.5,'cm-mm'),'ข้อความฝั่งซ้าย',
	0,0,'L',true,'',0,false,'T','T');		
	$this->SetFillColorArray(_hex2rgb('#EFE4B0'));		
	$this->SetTextColorArray(_hex2rgb('#000000'));	
	$this->SetFont('thsarabun', '', _conversion(18,'px-pt'), '', true);			
	$this->Cell(0,_conversion(0.5,'cm-mm'),'ข้อความฝั่งขวา',
	0,1,'R',true,'',0,false,'T','T');		
	$this->SetFillColorArray(_hex2rgb('#A349A4'));
	$this->SetTextColorArray(_hex2rgb('#FFFFFF'));	
	$this->SetFont('thsarabun', 'BU', _conversion(18,'px-pt'), '', true);				
	$this->Cell(0,_conversion(0.5,'cm-mm'),'ทดสอบการแสดงภาษาไทยตรงกลาง',
	0,1,'C',true,'',0,false,'T','T');				
}
 
ผลลัพธ์
 
 
 
รูปแบบการจัดส่วนของ Header แบบที่ 3
 
//ส่วนจัดการ header
public function Header() {
	// Logo
	$image_file = K_PATH_IMAGES.'tcpdf_logo.jpg';
	$this->Image($image_file,0,_conversion(1,'cm-mm'),
	0,_conversion(1,'cm-mm'),'',''
	,'L',false,300,'C',false,false,'',false,false,false);				
	$this->SetFillColorArray(_hex2rgb('#FFF200'));
	$this->SetTextColorArray(_hex2rgb('#000000'));	
	$this->SetFont('thsarabun', '', _conversion(18,'px-pt'), '', true);			
	$this->Cell(_conversion(250,'px-mm'),_conversion(2.5,'cm-mm'),'ข้อความฝั่งซ้าย',
	1,0,'L',false,'',0,true,'T','B');					
	$this->SetFillColorArray(_hex2rgb('#EFE4B0'));		
	$this->SetTextColorArray(_hex2rgb('#000000'));	
	$this->SetFont('thsarabun', '', _conversion(18,'px-pt'), '', true);			
	$this->Cell(0,_conversion(2.5,'cm-mm'),'ข้อความฝั่งขวา',
	1,1,'R',false,'',0,true,'T','B');		
	$this->SetFillColorArray(_hex2rgb('#FFF200'));
	$this->SetTextColorArray(_hex2rgb('#000000'));	
	$this->SetFont('thsarabun', '', _conversion(18,'px-pt'), '', true);			
	$this->Cell(_conversion(250,'px-mm'),0,'ข้อความฝั่งซ้าย',
	1,0,'L',false,'',0,false,'T','B');					
	$this->SetFillColorArray(_hex2rgb('#EFE4B0'));		
	$this->SetTextColorArray(_hex2rgb('#000000'));	
	$this->SetFont('thsarabun', '', _conversion(18,'px-pt'), '', true);			
	$this->Cell(0,0,'ข้อความฝั่งขวา',
	1,1,'R',false,'',0,false,'T','B');				
	$this->SetFillColorArray(_hex2rgb('#A349A4'));
	$this->SetTextColorArray(_hex2rgb('#FFFFFF'));	
	$this->SetFont('thsarabun', 'BU', _conversion(18,'px-pt'), '', true);				
	$this->Cell(0,_conversion(0.5,'cm-mm'),'ทดสอบการแสดงภาษาไทยตรงกลาง',
	1,1,'C',true,'',0,false,'T','T');				
}
 
ผลลัพธ์
 

 
 
 
รูปแบบการจัดส่วนของ footer แบบที่ 1
 
// ส่วนจัดการ footer
public function Footer() {
	$this->SetFillColorArray(_hex2rgb('#FFF200'));
	$this->SetTextColorArray(_hex2rgb('#000000'));	
	$this->SetFont('thsarabun', '', _conversion(18,'px-pt'), '', true);			
	$this->Cell(_conversion(250,'px-mm'),0,'ข้อความฝั่งซ้าย',
	0,0,'L',false,'',0,false,'T','B');					
	$this->SetFillColorArray(_hex2rgb('#EFE4B0'));		
	$this->SetTextColorArray(_hex2rgb('#000000'));	
	$this->SetFont('thsarabun', '', _conversion(18,'px-pt'), '', true);			
	$this->Cell(_conversion(450,'px-mm'),0,
	'หน้า '.$this->getAliasNumPage().' / '.$this->getAliasNbPages(),
	0,1,'R',false,'',0,false,'T','B');						
}

 
ผลลัพธ์
 
 
 
 
ตัวอย่างข้างต้น เป็นแนวทางเกี่ยวกับการจัดรูปแบบส่วนของ header และ footer ตามรูปแบบที่ต้องการ
ซึ่งการใช้งานหรือการนำไปใช้ ของแต่ละคนก็จะมีความแตกต่างกันไป ตามรูปแบบของงาน สิ่งที่สำคัญ
คือรูปแบบคำสั่ง และการใช้งานคำสั่ง ซึ่งถ้าเราทำความเข้าใจและทดสอบปรับค่าต่างๆ ด้วยตัวเอง
ก็จะเห็นภาพการทำงานได้ดีขึ้น 
    นอกจากนี้คำสั่งต่างๆ เพิ่มเติม เราสามารถทำความเข้าใจ แล้วศึกษาค่า parameter และการกำหนดค่า
ได้จากคู่มือ ที่ลิ้งค์ต่อไปนี้ https://tcpdf.org/docs/srcdoc/tcpdf/class-TCPDF/ ได้เพิ่มเติม

 








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



Tags:: จัดรูปแบบ header และ footer tcpdf






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


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