PHP Ionic Angularjs Phonegap AJAX Javascript CSS MySQL jQuery Forum


แนวทางจัดรูปแบบ header และ footer ของ pdf ไฟล์ที่สร้างด้วย tcpdf

21 June 2017 By
tcpdf จัดรูปแบบ header และ footer ตั้งค่าหน้ากระดาษ


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

โค้ดไฟล์ 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');
?>
 
ผลลัพธ์ไฟล์ pdf ส่วนของ header และ footer จะแสดงดังรูปด้านล่าง
 
 

 
 

 
 
 
การแก้ไขในส่วนของ โลโก้รูปภาพ หัวข้อ และข้อความ สามารถแก้ไขได้ในส่วนของโค้ด
 
// กำหนดข้อความส่วนแสดง 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 
);
 
ค่าตัวแปรคงที่ (constant) เช่น  PDF_HEADER_LOGO , PDF_HEADER_LOGO_WIDTH
PDF_HEADER_TITLE และ PDF_HEADER_STRING เป็นค่าที่เราสามารถแก้ไขได้ในไฟล์ 
config > tcpdf_config.php 
โดยในไฟล์ tcpdf_config.php นั้นจะมีการกำหนดค่าคงที่เริ่มต้นต่างๆ ที่ใช้งานใน TCPDF 
หน่วยที่ใช้กำหนดขนาด ค่าเริ่มต้นจะเป็น มิลลิเมตร (mm)

โค้ดไฟล์ tcpdf_config.php บางส่วน

/**
 * Document unit of measure [pt=point, mm=millimeter, cm=centimeter, in=inch].
 */
define ('PDF_UNIT', 'mm');
 
ดังนั้นการเปลี่ยนแปลงหน่วยการวัดขนาด เป็นค่าอื่นๆ จะมีผลต่อการแสดง pdf ทันที ในที่นี้
เราจะไม่เปลี่ยน จะใช้หน่วย mm แต่จะใช้วิธีสร้างฟังก์ชันแปลงค่าหน่วยมาใช้งานแทน
(กรณีถ้าต้องการเปลี่ยน ต้องไปปรับขนาดส่วนอื่นๆ ให้สอดคล้องด้วย)
 

การกำหนดค่าต่างๆ ในส่วนของ header

ถ้าเราไม่ต้องการเข้าไปแก้ไขในไฟล์ tcpdf_config.php ก็สามารถกำหนดค่าตัวแปรคงที่ขึ้นมา
ใหม่ที่สอดคล้องกับชื่อเดิม แล้วเรียกใช้งานจากไฟล์หลักได้ ดังนี้
 
// สร้างตัวแปรคงที่แบบ กำหนดค่าเอง
define('MYPDF_HEADER_LOGO','tcpdf_logo.jpg');
define('MYPDF_HEADER_LOGO_WIDTH',30);
define('MYPDF_HEADER_TITLE','TCPDF ตัวอย่าง 001');
define('MYPDF_HEADER_STRING','by Ninenik - ninenik.com www.ninenik.com');
// กำหนดข้อความส่วนแสดง header
$pdf->SetHeaderData(
    MYPDF_HEADER_LOGO, // โลโก้ กำหนดค่าในไฟล์  tcpdf_config.php 
    MYPDF_HEADER_LOGO_WIDTH,
    MYPDF_HEADER_TITLE,
    MYPDF_HEADER_STRING, // กำหนดเพิ่มเติมในไฟล์  tcpdf_config.php 
    array(0,0,0),  // กำหนดสีของข้อความใน header rgb 
    array(0,0,0)   // กำหนดสีของเส้นคั่นใน header rgb 
);
 
จากตัวอย่างเราสร้างตัวแปรคงที่ด้วยคำสั่ง define โดยเพิ่มคำว่า "MY" ต่อชื่อตัวแปรค่าคงที่เดิม
เพื่อให้เข้าใจสอดคล้องกัน เท่านี้เราก็สามารถกำหนดค่าส่วนของ header ในไฟล์ที่สร้าง pdf ได้เลย
 

การกำหนดรูปโลโก้

การกำหนดรูปโลโก้ ให้เราหาไฟล์รูปที่ต้องการจะใช้เป็นโลโก้ แนะนำชื่อไฟล์รูปควรเป็นภาษาอังกฤษ
จากนั้น นำไฟล์นั้นไปไว้ในโฟลเดอร์ tcpdf > images 
แล้วนำชื่อไฟล์มากำหนด ในส่วนของตัวแปรค่าคงที่ที่ชื่อ MYPDF_HEADER_LOGO ได้เลยดังนี้
 
define('MYPDF_HEADER_LOGO','logo_01_Sat.gif'); // สมมติใช้โลโก้ของ www.ninenik.com
 
ผลที่ได้จะเป็นดังรูป
 
 

 
 
จะเห็นว่ายังไม่ได้สัดส่วนเท่าไหร่นัก เราสามารถกำหนดความกว้างของโลโก้ได้ในส่วนของโค้ดบรรทัดต่อมา
เดิมโลโก้มีความกว่าง 30 มิลลิเมตร ค่าหน่วยตามที่กำหนดในไฟล์ 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];
}

// สร้างตัวแปรคงที่แบบ กำหนดค่าเอง
define('MYPDF_HEADER_LOGO','logo_01_Sat.gif');
define('MYPDF_HEADER_LOGO_WIDTH',_conversion(145,'px-mm'));
define('MYPDF_HEADER_TITLE','TCPDF ตัวอย่าง 001');
define('MYPDF_HEADER_STRING','by Ninenik - ninenik.com www.ninenik.com');
// กำหนดข้อความส่วนแสดง header
$pdf->SetHeaderData(
    MYPDF_HEADER_LOGO, // โลโก้ กำหนดค่าในไฟล์  tcpdf_config.php 
    MYPDF_HEADER_LOGO_WIDTH,
    MYPDF_HEADER_TITLE,
    MYPDF_HEADER_STRING, // กำหนดเพิ่มเติมในไฟล์  tcpdf_config.php 
    array(0,0,0),  // กำหนดสีของข้อความใน header rgb 
    array(0,0,0)   // กำหนดสีของเส้นคั่นใน header rgb 
);
 
ในตัวอย่างเรากำหนดใช้เป็น 145 px โดยใช้ฟังก์ชั่น _conversion() แปลงค่าเป็น mm
นอกจากการใช้งานฟังก์ชั่น ที่เราสร้างขึ้นมาเองแล้ว ในการแปลงค่าจาก pixel เป็นค่าหน่วยที่เรากำหนด
ในเอกสาร pdf ที่กำหนดใน define ('PDF_UNIT', 'mm');  เราสามารถใช้คำสั่งที่มีมาให้แล้วแทนได้
โดยใช้คำสั่ง 
 
$pdf->pixelsToUnits(ค่าในหน่วย pixel); 
// ค่าในหน่วย pixel จะถูกแปลงไปเป็นค่าในหน่วยที่กำหนดในตัวแปร PDF_UNIT
 
หมายเหตุ: เหตุผลที่เราสร้างฟักง์ชั่น _conversion() มาใช้งานนั้น เนื่องจาก การกำหนดค่า PDF_UNIT นั้น
จะเป็นการกำหนดค่าให้กับขนาดต่างของเอกสาร ยกเว้นส่วนของตัวอักษร
ใน TCPDF จะใช้ตัวอักษรในหน่วย pt (point)  ดังนั้น การกำหนดค่าใดๆ ที่เป็นตัวอักษร จะไม่ใช่ในหน่วย
ที่กำหนดในตัวแปร PDF_UNIT แต่จะเป็นค่าในหน่วย pt (point)
และโดยปกติ เวลากำหนดขนาดตัวอักษร เราจะคุ้นเคยกับการใช้งานในหน่วย px (pixel) ดังนั้นฟังก์ชั่น 
_conversion() จึงสามารถช่วยให้เรากำหนดขนาดของตัวอักษรที่ต้องการ ได้สะดวกยิ่งขึ้น 
จะกล่าวเพิ่มเติมในหัวข้อด้านล่าง เกี่ยวกับการกำหนดขนาดตัวอักษรของส่วน header และ footer
 
หลังจากที่เราปรับขนาดให้ได้ระยะที่เหมาะสมตามต้องการ จากโค้ดตัวอย่างด้านบน จะได้ผลดังนี้
 
 

 
 
ในส่วนของการกำหนด MYPDF_HEADER_STRING ถ้าเราต้องการให้มีการเพิ่มบรรทัดเข้าไป
เราต้องเพิ่มสัญลักษณ์ \n แทรกเข้าไปในข้อความ และ เปลี่ยนจาก single qoute เป็น double qoute
 
define('MYPDF_HEADER_STRING','by Ninenik - ninenik.com www.ninenik.com');
 
เปลี่ยนเป็น
 
define('MYPDF_HEADER_STRING',"by Ninenik - ninenik.com\nwww.ninenik.com");
 
จะได้ผลลัพธ์ดังรูป
 
 

 
 
จะเห็นว่าส่วนของ www.ninenik.com มีการขึ้นบรรทัดใหม่ พร้อมกับเป็นลิ้งค์ที่สามารถคลิกได้
การเพิ่มบรรทัดใหม่ในลักษณะข้างต้น จะมีผลกับส่วนของโลโก้ และเนื่องจากเราใช้รูปแบบ
ค่าเริ่มต้นการจัดเรียง header จึงไม่สามารถที่จะเคลื่อนโลโก้ลงมาได้ แนวทางแก้ปํญหาในกรณีนี้
คือให้เราสร้างรูปโลโก้ อาจจะให้มีพื้นที่ขอบส่วนเกินสีขาวเพิ่มเข้ามาตามความเหมาะสม เพื่อให้ส่วน
ของรูปข้อความหรือโลโก้อยู่ในตำแหน่งที่ต้องการ
 

การกำหนดสีให้กับข้อความและเส้นคั่น header

ในการกำหนดค่าคำสั่ง SetHeaderData() สองตัวท้ายจากในโค้ด จะเป็นการกำหนดค่าสีของข้อความ และเส้นคั่น
โดยใข้ค่าในรูปแบบ array ของค่าสี RGB ซึ่งอาจจะไม่สะดวกเท่าไหร่ เราจึงมีฟังก์ชั่นสำหรับแปลงค่าสี
ที่เราคุ้นเคย ซึ่งอยู่ในรูปแบบเลขฐานสิบหก ตัวอย่างเช่น สีขาว ก็เป็น #FFFFFF สีดำก็เป็น #000000 เป็นต้น
ฟังก์ชั่นแปลงค่าสีของเราคือ _hex2rgb() จากโค้ดด้านบนที่ได้ยกมาแล้ว สมมติเราต้องการเปลี่ยนสีข้อความ
และเส้นคั่นเป็นสีม่วง เราได้ค่าสีมาแล้วคือ #A349A4  เราก็สามารถนำไปใช้งานได้ดังนี้

// กำหนดข้อความส่วนแสดง header
$pdf->SetHeaderData(
    MYPDF_HEADER_LOGO, // โลโก้ กำหนดค่าในไฟล์  tcpdf_config.php 
    MYPDF_HEADER_LOGO_WIDTH,
    MYPDF_HEADER_TITLE,
    MYPDF_HEADER_STRING, // กำหนดเพิ่มเติมในไฟล์  tcpdf_config.php 
    _hex2rgb('#A349A4'),  // กำหนดสีของข้อความใน header rgb 
    _hex2rgb('#A349A4')   // กำหนดสีของเส้นคั่นใน header rgb 
);
 
ก็จะได้ผลลัพธ์ดังนี้
 


 
 
ถ้าต้องการไม่ให้แสดงเส้นคั่น เราสามารถแก้โดยเปลี่ยนค่าสีเป็นสีขาว #FFFFFF จะได้เป็นดังนี้
 
 

 
 
 

การกำหนดสีให้กับข้อความและเส้นคั่น footer

ในส่วนของ footer จะมีกำหนดค่าอยู่สองค่าคือ สีของข้อความใน footer และสีของเส้นคั่น
ดังนี้
 
$pdf->setFooterData(
    array(0,64,0),  // กำหนดสีของข้อความใน footer rgb 
    array(220,44,44)   // กำหนดสีของเส้นคั่นใน footer rgb 
);
 
สมมติเราเปลี่ยนเป็นสีม่วง เหมือนส่วนของ header โดยใช้ค่าสี ตามนี้
 
$pdf->setFooterData(
    _hex2rgb('#A349A4'),  // กำหนดสีของข้อความใน footer rgb 
    _hex2rgb('#A349A4')   // กำหนดสีของเส้นคั่นใน footer rgb 
);
 
จะได้ผลลัพธ์เป็นดังนี้
 

 
 
 
หากเราไม่ต้องการที่จะแสดงส่วนของ header หรือ footer สามารถใช้คำสั่งนี้แทรกเข้าไปได้
 
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);
 
โดยตำแหน่งการแทรก ก็อาจจะวางไว้ใต้คำสั่ง setFooterData() ดังนี้
 
$pdf->setFooterData(
    _hex2rgb('#A349A4'),  // กำหนดสีของข้อความใน footer rgb 
    _hex2rgb('#A349A4')   // กำหนดสีของเส้นคั่นใน footer rgb 
);

$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);
 
ผลลัพธ์ที่ได้ คือจะไม่มีส่วนของข้อมูล header และ footer แสดง แต่พื้นที่ของข้อมูล
ของทั้งสองส่วนก็ยังถูกเก็บไว้ไม่ได้ตัดออก ดังรูป
 
 

 
 
 


 

การกำหนดชื่อฟอนท์ตัวอักษรและขนาดให้กับ header และ footer

เราสามารถกำหนดชื่อฟอนท์ตัวอักษรที่ต้องการใช้งาน พร้อมกับหนดขนาดของตัวอักษร
ได้โดยทำผ่านคำสั่ง
 
// กำหนดฟอนท์ของ 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));
 
กรณีไม่ต้องการแก้ไขที่ไฟล์ tcpdf_config.php ก็สามารถสร้างตัวแปรค่าคงที่เหมือนที่เรากำหนด
ให้กับข้อมูลของ header และ footer ที่ได้กล่าวมาแล้วข้างต้น ดังนี้
 
// กำหนดตัวแปรคงที่แบบกำหนดค่าเอง
define('MYPDF_FONT_NAME_MAIN','thsarabun');
define('MYPDF_FONT_SIZE_MAIN',_conversion(20,'px-pt'));
define('MYPDF_FONT_NAME_DATA','thsarabun');
define('MYPDF_FONT_SIZE_DATA',_conversion(20,'px-pt'));
// กำหนดฟอนท์ของ header และ footer  กำหนดเพิ่มเติมในไฟล์  tcpdf_config.php 
$pdf->setHeaderFont(Array(MYPDF_FONT_NAME_MAIN, '', MYPDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(MYPDF_FONT_NAME_DATA, '', MYPDF_FONT_SIZE_DATA));
 
จะเห็นว่าทั้งในส่วนของ header และ footer เราต้องการให้ขนาดของตัวอักษร มีขนาดเท่ากับ
20 px แต่เนื่องจากใน TCPDF หน่วยที่ใช้สำหรับตัวอักษรจะเป็นหน่วย pt เราจึงมีการใช้ฟังก์ชั่น
_conversion() เข้ามาใช้งาน ซึ่งค่าของ 20 px = 15 pt
 
ค่าเดิมใน tcpdf_config.php  ใช้เป็น thsarabun ทั้งสองส่วน และใช้ขนาด
12 pt ใน header และ 10 pt ใน footer เป้นดังนี้

โค้ดไฟล์ tcpdf_config.php บางส่วน

/**
 * Default main font name.
 */
define ('PDF_FONT_NAME_MAIN', 'thsarabun');

/**
 * Default main font size.
 */
define ('PDF_FONT_SIZE_MAIN', 12);

/**
 * Default data font name.
 */
define ('PDF_FONT_NAME_DATA', 'thsarabun');

/**
 * Default data font size.
 */
define ('PDF_FONT_SIZE_DATA', 10);
 
 

ตัวอย่างผลลัพธ์ที่ได้เมื่อเรากำหนดให้มีขนาดตัวอักษรเท่ากับ 20 px

 

 
 

 
 

การกำหนดการตั้งค่าหน้ากระดาษแบบกำหนดเอง

การกำหนดการตั้งค่าหน้ากระดาษไม่ว่าจะเป็นในส่วนของ header footer และส่วนของเนื้อหา content
ของเอกสาร pdf ค่าเริ่มต้นจะถูกเรียกใช้และกำหนดในส่วนของโค้ด
 
// กำหนดขอบเขตความห่างจากขอบ  กำหนดเพิ่มเติมในไฟล์  tcpdf_config.php 
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
 
เรามาลองกำหนดค่าในส่วนนี้ขึ้นมาทับหรือแทนที่ค่าเริ่มต้น สมมติเรากำหนดทุกอย่างให้เท่ากับ
ค่า 0 เพื่อดูว่า จะมีลักษณะเป็นอย่างไร ดังนี้
 
// กำหนดตัวแปรค่าคงที่สำหรับการจัดค่าหน้ากระดาษ
define('MYPDF_MARGIN_LEFT',0);
define('MYPDF_MARGIN_TOP',0);
define('MYPDF_MARGIN_RIGHT',0);
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);
 
ผลลัพธ์ที่ได้จะเป็นดังนี้
 
 

 
 

 
 
การกำหนดค่าในลักษณะข้างต้น เราจะพบว่า ส่วนของเนื้อหา content จะชิดขอบทั้งด้านซ้าย ด้านบน และ
ด้านขวา แต่เนื่องจากเนื้อหาของเราเป็นตาราง และกำหนดความกว้างตารางเป็น 1100px (อยู่ในไฟล์ตัวอย่าง
ชื่อ data_html.php) ทำให้ด้านขวา ดูเหมือนกับมีช่องว่างไม่ได้ชิดขอบ เพราะความยาวของตารางน้อยกว่า
พื้นที่ของเอกสาร pdf จึงเกิดช่องว่างขึ้น
ในส่วนของ header เราก็จะเห็นว่า มีการชิดขอบด้านซ้ายและด้านบนของเอกสาร pdf 
และในส่วนของ footer จะถูกดันออกไปนอกเอกสาร pdf เราจะสังเกตเห็นเส้นขอบสีม่วง ของส่วน footer
อยู่ขอบด้านล่างสุด
    ในส่วนของเนื้อหาด้านล่าง จากการกำหนดค่าด้านบน เราไม่มีการกำหนดค่าให้กับการชิดขอบด้านล่าง
ทั้งนี้ก็เพราะ เรามีการใช้งานการขึ้นหน้าเพจหรือหน้าเอกสารใหม่อัตโนมัติ โดยใช้คำสั่ง
 
// กำหนดแบ่่งหน้าอัตโนมัติ
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
 
โดยค่าเริ่มต้นของการเยื้องเข้ามาด้านในจากขอบด้านล่างค่าเริ่มต้นที่กำหนดในไฟล์ tcpdf_config.php 
มีค่าเท่ากับ 25 mm
 

โค้ดไฟล์ tcpdf_config.php บางส่วน

/**
 * Bottom margin.
 */
define ('PDF_MARGIN_BOTTOM', 25);
 
เราจึงเห็นว่าหลังจบเนื้อหาส่วนท้ายของแต่ละหน้า จะมีช่องว่างพื้นที่จากขอบด้านล่างเท่ากับ 25 mm
 
เราลองสมมติกำหนดค่าส่วนนี้เป็น 0 ดังนี้ดูว่าจะเป็นยังไง
 
// กำหนดตัวแปรค่าคงที่การชิดขอบด้านล่างของเนื้อหา
define('MYPDF_MARGIN_BOTTOM',0);
// กำหนดแบ่่งหน้าอัตโนมัติ
$pdf->SetAutoPageBreak(TRUE, MYPDF_MARGIN_BOTTOM);
 
จะได้ผลลัพธ์เป็นดังนี้
 
 

 
 
จะเห็นว่าส่วนของเนื้อหาจะชิดขอบด้านล่างสุด ดังรูปด้านบน โดยไม่มีพื้นที่ว่างเกิดขึ้น
 
การทดสอบกำหนดค่าการตั้งค่าหน้ากระดาษข้างต้น ทำให้เราเห็นภาพว่า ถ้าเราต้องการกำหนดส่วนไหน
ต้องทำการแก้ไขค่าใด บ้าง ทีนี้เราจะขอตัวอย่างการกำหนดการตั้งค่าหน้ากระดาษ สำหรับเอกสาร ราชการ
ที่มีการกำหนดในหน่วยที่เป็นนิ้ว มาลองประยุกใช้กับ tcpdf ดู ดังนี้
 
สมมติการกำหนดหน้าขอบของเอกสารราชการกำหนดดังนี้

การตั้งระยะขอบกระดาษ

- ขอบซ้าย 3 เซนติเมตร
- ขอบขวา  2 เซนติเมตร
- ขอบบน 2.5 เซนติเมตร
- ขอบล่างประมาณ 2 เซนติเมตร
 
จะได้เป็น
 
// กำหนดตัวแปรค่าคงที่สำหรับการจัดค่าหน้ากระดาษ
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);
 
ผลลัพธ์ที่ได เราใช้วิธีเทสีเพื่อให้เห็นส่วนของขอบเนื้อหาด้านซ้าย บน ขวา และด้านล่างให้ชัดเจนขึ้น
โดยไม่ต้องสนใจส่วนของเนื้อหา header หรือ footer จะได้ผลลัพธ์ดังรุป
 
 



 
 
 
เนื้อหาในตอนนี้เราได้รู้จักวิธีการปรับแต่งค่าต่างๆ ของ header และ footer โดยยึดตามรูปแบบการแสดงผล
ตามค่าเริ่มต้น รวมถึงการจัดการเกี่ยวกับการกำหนดการตั้งค่าหน้ากระดาษ การใช้ค่าข้อมูลในหน่วยต่างๆ 
ให้สอดคล้องกับข้อมูลที่ต้องการ การกำหนดขนาดของอักษรในหน่วย pt เป็นแนวทางเบื้องต้นไปแล้ว
    ในตอนหน้า เราจะมาเสริมในส่วนของการกำหนด header และ footer ในรูปแบบที่เราต้องการ ไม่ว่าจะเป็น
การจัดการตำแหน่งของหัวข้อ การจัดการตำแหน่งของโลโก้ การจัดการกับตำแหน่งข้อมูลส่วนของ footer
ต่างๆ เหล่านี้ในแบบที่เรากำหนดเองได้ รอติดตาม
 








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



Tags:: tcpdf จัดรูปแบบ header และ footer ตั้งค่าหน้ากระดาษ






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


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