เนื้อหานี้ เราจะมาให้แนวทางการจัดรูปแบบของ pdf ไฟล์ ทีสร้างด้วย tcpdf ในส่วนของ
header และ footer เพื่อให้เราสามารถนำไปปรับหรือประยุกต์ใช้งานได้ง่าย
และตรงตามที่ต้องการ โดยจะเป็นการใช้ไฟล์ และเนื้อหาจากบทความเรื่อง
ตัวอย่าง tcpdf ดึงข้อมูลจากฐานข้อมูล สร้าง report อย่างง่าย
https://www.ninenik.com/content.php?arti_id=575 via @ninenik
ด้านล่างเป็นโค้ดตัวอย่างไฟล์ตั้งต้น ของเรา
โค้ดไฟล์ test_list_table.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | <?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' ]); $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 จะแสดงดังรูปด้านล่าง
การแก้ไขในส่วนของ โลโก้รูปภาพ หัวข้อ และข้อความ สามารถแก้ไขได้ในส่วนของโค้ด
1 2 3 4 5 6 7 8 9 | // กำหนดข้อความส่วนแสดง 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 บางส่วน
1 2 3 4 | /** * Document unit of measure [pt=point, mm=millimeter, cm=centimeter, in=inch]. */ define ( 'PDF_UNIT' , 'mm' ); |
ดังนั้นการเปลี่ยนแปลงหน่วยการวัดขนาด เป็นค่าอื่นๆ จะมีผลต่อการแสดง pdf ทันที ในที่นี้
เราจะไม่เปลี่ยน จะใช้หน่วย mm แต่จะใช้วิธีสร้างฟังก์ชันแปลงค่าหน่วยมาใช้งานแทน
(กรณีถ้าต้องการเปลี่ยน ต้องไปปรับขนาดส่วนอื่นๆ ให้สอดคล้องด้วย)
การกำหนดค่าต่างๆ ในส่วนของ header
ถ้าเราไม่ต้องการเข้าไปแก้ไขในไฟล์ tcpdf_config.php ก็สามารถกำหนดค่าตัวแปรคงที่ขึ้นมา
ใหม่ที่สอดคล้องกับชื่อเดิม แล้วเรียกใช้งานจากไฟล์หลักได้ ดังนี้
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | // สร้างตัวแปรคงที่แบบ กำหนดค่าเอง 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 ได้เลยดังนี้
1 | define( 'MYPDF_HEADER_LOGO' , 'logo_01_Sat.gif' ); // สมมติใช้โลโก้ของ www.ninenik.com |
ผลที่ได้จะเป็นดังรูป
จะเห็นว่ายังไม่ได้สัดส่วนเท่าไหร่นัก เราสามารถกำหนดความกว้างของโลโก้ได้ในส่วนของโค้ดบรรทัดต่อมา
เดิมโลโก้มีความกว่าง 30 มิลลิเมตร ค่าหน่วยตามที่กำหนดในไฟล์ tcpdf_config.php แต่เนื่องจากหน้า
จอคอมของเราจะเป็นหน่วย พิกเซล หรือเราคุ้นเคยกับหน่วยพิกเซลมากกว่า ก็สามารถสร้างฟังก์ชั่นสำหรับ
แปลงค่าเพิ่มเติมไว้เรียกใช้งานได้ ดังนี้
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | // สร้างฟังก์ชั่นสำหรับใช้งานเพิ่มเติม // ฟังกืชั่นแปลงค่าสีในรูปแบบเลขฐาน 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'); เราสามารถใช้คำสั่งที่มีมาให้แล้วแทนได้
โดยใช้คำสั่ง
1 2 | $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
1 | define( 'MYPDF_HEADER_STRING' , 'by Ninenik - ninenik.com www.ninenik.com' ); |
เปลี่ยนเป็น
1 | define( 'MYPDF_HEADER_STRING' , "by Ninenik - ninenik.com\nwww.ninenik.com" ); |
จะได้ผลลัพธ์ดังรูป
จะเห็นว่าส่วนของ www.ninenik.com มีการขึ้นบรรทัดใหม่ พร้อมกับเป็นลิ้งค์ที่สามารถคลิกได้
การเพิ่มบรรทัดใหม่ในลักษณะข้างต้น จะมีผลกับส่วนของโลโก้ และเนื่องจากเราใช้รูปแบบ
ค่าเริ่มต้นการจัดเรียง header จึงไม่สามารถที่จะเคลื่อนโลโก้ลงมาได้ แนวทางแก้ปํญหาในกรณีนี้
คือให้เราสร้างรูปโลโก้ อาจจะให้มีพื้นที่ขอบส่วนเกินสีขาวเพิ่มเข้ามาตามความเหมาะสม เพื่อให้ส่วน
ของรูปข้อความหรือโลโก้อยู่ในตำแหน่งที่ต้องการ
การกำหนดสีให้กับข้อความและเส้นคั่น header
ในการกำหนดค่าคำสั่ง SetHeaderData() สองตัวท้ายจากในโค้ด จะเป็นการกำหนดค่าสีของข้อความ และเส้นคั่น
โดยใข้ค่าในรูปแบบ array ของค่าสี RGB ซึ่งอาจจะไม่สะดวกเท่าไหร่ เราจึงมีฟังก์ชั่นสำหรับแปลงค่าสี
ที่เราคุ้นเคย ซึ่งอยู่ในรูปแบบเลขฐานสิบหก ตัวอย่างเช่น สีขาว ก็เป็น #FFFFFF สีดำก็เป็น #000000 เป็นต้น
ฟังก์ชั่นแปลงค่าสีของเราคือ _hex2rgb() จากโค้ดด้านบนที่ได้ยกมาแล้ว สมมติเราต้องการเปลี่ยนสีข้อความ
และเส้นคั่นเป็นสีม่วง เราได้ค่าสีมาแล้วคือ #A349A4 เราก็สามารถนำไปใช้งานได้ดังนี้
1 2 3 4 5 6 7 8 9 | // กำหนดข้อความส่วนแสดง 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 และสีของเส้นคั่น
ดังนี้
1 2 3 4 | $pdf ->setFooterData( array (0,64,0), // กำหนดสีของข้อความใน footer rgb array (220,44,44) // กำหนดสีของเส้นคั่นใน footer rgb ); |
สมมติเราเปลี่ยนเป็นสีม่วง เหมือนส่วนของ header โดยใช้ค่าสี ตามนี้
1 2 3 4 | $pdf ->setFooterData( _hex2rgb( '#A349A4' ), // กำหนดสีของข้อความใน footer rgb _hex2rgb( '#A349A4' ) // กำหนดสีของเส้นคั่นใน footer rgb ); |
จะได้ผลลัพธ์เป็นดังนี้
หากเราไม่ต้องการที่จะแสดงส่วนของ header หรือ footer สามารถใช้คำสั่งนี้แทรกเข้าไปได้
1 2 | $pdf ->setPrintHeader(false); $pdf ->setPrintFooter(false); |
โดยตำแหน่งการแทรก ก็อาจจะวางไว้ใต้คำสั่ง setFooterData() ดังนี้
1 2 3 4 5 6 7 | $pdf ->setFooterData( _hex2rgb( '#A349A4' ), // กำหนดสีของข้อความใน footer rgb _hex2rgb( '#A349A4' ) // กำหนดสีของเส้นคั่นใน footer rgb ); $pdf ->setPrintHeader(false); $pdf ->setPrintFooter(false); |
ผลลัพธ์ที่ได้ คือจะไม่มีส่วนของข้อมูล header และ footer แสดง แต่พื้นที่ของข้อมูล
ของทั้งสองส่วนก็ยังถูกเก็บไว้ไม่ได้ตัดออก ดังรูป
การกำหนดชื่อฟอนท์ตัวอักษรและขนาดให้กับ header และ footer
เราสามารถกำหนดชื่อฟอนท์ตัวอักษรที่ต้องการใช้งาน พร้อมกับหนดขนาดของตัวอักษร
ได้โดยทำผ่านคำสั่ง
1 2 3 | // กำหนดฟอนท์ของ 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 ที่ได้กล่าวมาแล้วข้างต้น ดังนี้
1 2 3 4 5 6 7 8 | // กำหนดตัวแปรคงที่แบบกำหนดค่าเอง 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 บางส่วน
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /** * 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 ค่าเริ่มต้นจะถูกเรียกใช้และกำหนดในส่วนของโค้ด
1 2 3 4 | // กำหนดขอบเขตความห่างจากขอบ กำหนดเพิ่มเติมในไฟล์ 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 เพื่อดูว่า จะมีลักษณะเป็นอย่างไร ดังนี้
1 2 3 4 5 6 7 8 9 10 | // กำหนดตัวแปรค่าคงที่สำหรับการจัดค่าหน้ากระดาษ 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
อยู่ขอบด้านล่างสุด
ในส่วนของเนื้อหาด้านล่าง จากการกำหนดค่าด้านบน เราไม่มีการกำหนดค่าให้กับการชิดขอบด้านล่าง
ทั้งนี้ก็เพราะ เรามีการใช้งานการขึ้นหน้าเพจหรือหน้าเอกสารใหม่อัตโนมัติ โดยใช้คำสั่ง
1 2 | // กำหนดแบ่่งหน้าอัตโนมัติ $pdf ->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); |
โดยค่าเริ่มต้นของการเยื้องเข้ามาด้านในจากขอบด้านล่างค่าเริ่มต้นที่กำหนดในไฟล์ tcpdf_config.php
มีค่าเท่ากับ 25 mm
โค้ดไฟล์ tcpdf_config.php บางส่วน
1 2 3 4 | /** * Bottom margin. */ define ( 'PDF_MARGIN_BOTTOM' , 25); |
เราจึงเห็นว่าหลังจบเนื้อหาส่วนท้ายของแต่ละหน้า จะมีช่องว่างพื้นที่จากขอบด้านล่างเท่ากับ 25 mm
เราลองสมมติกำหนดค่าส่วนนี้เป็น 0 ดังนี้ดูว่าจะเป็นยังไง
1 2 3 4 | // กำหนดตัวแปรค่าคงที่การชิดขอบด้านล่างของเนื้อหา define( 'MYPDF_MARGIN_BOTTOM' ,0); // กำหนดแบ่่งหน้าอัตโนมัติ $pdf ->SetAutoPageBreak(TRUE, MYPDF_MARGIN_BOTTOM); |
จะได้ผลลัพธ์เป็นดังนี้
จะเห็นว่าส่วนของเนื้อหาจะชิดขอบด้านล่างสุด ดังรูปด้านบน โดยไม่มีพื้นที่ว่างเกิดขึ้น
การทดสอบกำหนดค่าการตั้งค่าหน้ากระดาษข้างต้น ทำให้เราเห็นภาพว่า ถ้าเราต้องการกำหนดส่วนไหน
ต้องทำการแก้ไขค่าใด บ้าง ทีนี้เราจะขอตัวอย่างการกำหนดการตั้งค่าหน้ากระดาษ สำหรับเอกสาร ราชการ
ที่มีการกำหนดในหน่วยที่เป็นนิ้ว มาลองประยุกใช้กับ tcpdf ดู ดังนี้
สมมติการกำหนดหน้าขอบของเอกสารราชการกำหนดดังนี้
การตั้งระยะขอบกระดาษ
- ขอบซ้าย 3 เซนติเมตร
- ขอบขวา 2 เซนติเมตร
- ขอบบน 2.5 เซนติเมตร
- ขอบล่างประมาณ 2 เซนติเมตร
จะได้เป็น
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | // กำหนดตัวแปรค่าคงที่สำหรับการจัดค่าหน้ากระดาษ 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
ต่างๆ เหล่านี้ในแบบที่เรากำหนดเองได้ รอติดตาม