เนื้อหานี้ เราจะมาให้แนวทางการจัดรูปแบบของ pdf ไฟล์ ทีสร้างด้วย tcpdf ในส่วนของ
header และ footer เพื่อให้เราสามารถนำไปปรับหรือประยุกต์ใช้งานได้ง่าย
และตรงตามที่ต้องการ โดยจะเป็นการใช้ไฟล์ และเนื้อหาจากบทความเรื่อง
ตัวอย่าง tcpdf ดึงข้อมูลจากฐานข้อมูล สร้าง report อย่างง่าย
https://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
ต่างๆ เหล่านี้ในแบบที่เรากำหนดเองได้ รอติดตาม