ในบทก่อนหน้านี้ผมได้นำเสนอวิธีการสร้างหัวกระดาษไปแล้ว แต่ในบทนั้นจะกำหนดอะไรไม่ค่อยได้ หมายถึงตำแหน่งโลโก ตำแหน่งข้อความ กำหนดได้แค่โลโกกับข้อความแค่นั้น
ในบทนี้ผมจะนำเสนอวิธีการสร้างหัวกระดาษแบบที่จะกำหนดอะไรก็ได้ตามใจชอบ ดูโค้ดก่อนค่อยอธิบายทีหลัง
<?php
require_once('vendor/autoload.php');
// Extend the TCPDF class to create custom Header and Footer
class MYPDF extends TCPDF {
//Page header
public function Header() {
// Logo
$this->Image(dirname(__FILE__).'/images/mym.png', 175, 5, 18);
// Set font
$this->SetFont('helvetica', 'B', 20);
// Title
$this->SetX(145);
$this->Cell(20, 0, 'Select2web inc', 0, false, 'R');
$this->Ln();
$this->SetFont('helvetica', '', 10);
$this->SetX(145);
$this->Cell(20, 0, 'Email : [email protected]', 0, false, 'R');
$this->Ln();
$this->SetX(145);
$this->Cell(20, 0, 'Mobile : 0854354212', 0, false, 'R');
}
}
// create new PDF document
$pdf = new MYPDF('P', PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
// set document information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('Nicola Asuni');
$pdf->SetTitle('TCPDF Example 001');
$pdf->SetSubject('TCPDF Tutorial');
$pdf->SetKeywords('TCPDF, PDF, example, test, guide');
// set header
$pdf->setPrintHeader(true);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
// set margins
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
// set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
// Add a page
$pdf->AddPage();
// Print text
$pdf->WriteHTML("Content");
// ---------------------------------------------------------
// Close and output PDF document
// This method has several options, check the source code documentation for more information.
$pdf->Output('hello-tcpdf.pdf', 'I');
$pdf->Close();
ผลจากการรันโค้ดจะออกมาดังภาพ
จากภาพจะเห็นว่าผมกำหนดให้โลโกอยู่ทางด้านขวาสุดของหน้า แล้วข้อมูลบริษัทอยู่ทางด้านซ้ายของโลโกมา ผลมันมาจากโค้ดตรงนี้ครับ
// Extend the TCPDF class to create custom Header and Footer
class MYPDF extends TCPDF {
//Page header
public function Header() {
// Logo
$this->Image(dirname(__FILE__).'/images/mym.png', 175, 5, 18);
// Set font
$this->SetFont('helvetica', 'B', 20);
// Title
$this->SetX(145);
$this->Cell(20, 0, 'Select2web inc', 0, false, 'R');
$this->Ln();
$this->SetFont('helvetica', '', 10);
$this->SetX(145);
$this->Cell(20, 0, 'Email : [email protected]', 0, false, 'R');
$this->Ln();
$this->SetX(145);
$this->Cell(20, 0, 'Mobile : 0854354212', 0, false, 'R');
}
}
การจะทำ Custom Header นั้นจะต้อง extend class TCPDF ออกมาเป็นคลาสใหม่แล้วเขียนเมธอด Header เข้าไป
$this->Image(dirname(__FILE__).'/images/mym.png', 175, 5, 18);
เป็นตัวบอกว่าให้เอาภาพ mym.png ใส่เข้าไปในตำแหน่ง x:175,y:5 ขนาดภาพ 18 pixcel
$this->SetFont('helvetica', 'B', 20);
กำหนดใช้ฟ้อนต์ชื่อ helvetica ตัวหนา ขนาด 20
$this->SetX(145);
เลื่อนเคอเซอร์ไปในแนวแกน x ที่ตำแหน่ง 145 (ต้องลองขยับตัวเลขดูครับ จะรู้ว่าตรงไหน 145 ตรงไหน 190)
$this->Cell(20, 0, 'Select2web inc', 0, false, 'R');
พิมพ์กล่องบรรจุข้อความ Select2web inc อยู่ภายใน ขนาดกล่องกว้าง 20 มิล. สูง 0 มิล. (หมายความว่าไม่ต้องไปสนใจความสูง) ความสูงจะมีผลทำให้ตำแหน่งข้อความขยับขึ้นลงด้วยนะครับ ไม่มีขอบ, ไม่ต้องเลื่อนเคอเซอร์ขึ้นบรรทัดใหม่หลังพิมพ์ข้อความเสร็จ แล้วก็ให้จัดข้อความชิดขวา
สำหรับ TCPDF นั้น 0 หรือ false จะมีค่าเท่ากัน ตรงไหนมี 0 ใช้ฟอลต์แทนได้ ตรงไหนมี false ใช้ 0 แทนได้ ยกเว้นค่ากว้างยาวนะอันนั้นไม่เกี่ยว
$this->Ln();
สั่งเคอเซอร์ขึ้นบรรทัดใหม่
จากนั้นก็ทำซ้ำเดิม กำหนดขนาดตัวอักษรเล็กลงมาเหลือ 10 ขยับเคอเซอร์ไปในแนวนอน พิมพ์ข้อความว่า Email…
// create new PDF document
$pdf = new MYPDF('P', PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
ตอน new คลาสเราก็ new จาก MYPDF ไม่ใช่จาก TCPDF
สำหรับคำสั่งแต่ละคำสั่งที่ใช้ในโค้ดให้ท่านดูรายละเอียดในคลาส TCPDF เพิ่มเติมนะครับ ถ้าท่านใช้ vscode ก็กดปุ่ม ctrl ค้างไว้แล้วคลิกที่คำสั่งที่ต้องการ ระบบก็จะเปิดรายละเอียดคำสั่งนั้นขึ้นมาให้ท่านดูเอง
ที่ให้ดูเพราะว่า แต่ละคำสั่งมันไม่ได้มีพารามิเตอร์แค่ที่ผมแสดงในโค้ดครับ มันมีอีกเพียบ อย่างคำสั่ง Cell เนี่ยมันสามารถสั่งพิมพ์ข้อความออกมาเป็นลิ้งก์ได้เลย
ตย. ตัวอย่าง
/**
* Prints a cell (rectangular area) with optional borders, background color and character string. The upper-left corner of the cell corresponds to the current position. The text can be aligned or centered. After the call, the current position moves to the right or to the next line. It is possible to put a link on the text.<br />
* If automatic page breaking is enabled and the cell goes beyond the limit, a page break is done before outputting.
* @param float $w Cell width. If 0, the cell extends up to the right margin.
* @param float $h Cell height. Default value: 0.
* @param string $txt String to print. Default value: empty string.
* @param mixed $border Indicates if borders must be drawn around the cell. The value can be a number:<ul><li>0: no border (default)</li><li>1: frame</li></ul> or a string containing some or all of the following characters (in any order):<ul><li>L: left</li><li>T: top</li><li>R: right</li><li>B: bottom</li></ul> or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)))
* @param int $ln Indicates where the current position should go after the call. Possible values are:<ul><li>0: to the right (or left for RTL languages)</li><li>1: to the beginning of the next line</li><li>2: below</li></ul> Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0.
* @param string $align Allows to center or align the text. Possible values are:<ul><li>L or empty string: left align (default value)</li><li>C: center</li><li>R: right align</li><li>J: justify</li></ul>
* @param boolean $fill Indicates if the cell background must be painted (true) or transparent (false).
* @param mixed $link URL or identifier returned by AddLink().
* @param int $stretch font stretch mode: <ul><li>0 = disabled</li><li>1 = horizontal scaling only if text is larger than cell width</li><li>2 = forced horizontal scaling to fit cell width</li><li>3 = character spacing only if text is larger than cell width</li><li>4 = forced character spacing to fit cell width</li></ul> General font stretching and scaling values will be preserved when possible.
* @param boolean $ignore_min_height if true ignore automatic minimum height value.
* @param string $calign cell vertical alignment relative to the specified Y value. Possible values are:<ul><li>T : cell top</li><li>C : center</li><li>B : cell bottom</li><li>A : font top</li><li>L : font baseline</li><li>D : font bottom</li></ul>
* @param string $valign text vertical alignment inside the cell. Possible values are:<ul><li>T : top</li><li>C : center</li><li>B : bottom</li></ul>
* @public
* @since 1.0
* @see SetFont(), SetDrawColor(), SetFillColor(), SetTextColor(), SetLineWidth(), AddLink(), Ln(), MultiCell(), Write(), SetAutoPageBreak()
*/
public function Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=false, $link='', $stretch=0, $ignore_min_height=false, $calign='T', $valign='M')
Leave a Reply