ภาพไม่เกี่ยวกับบทความ

การพิมพ์ภาษาไทยลงไปในเอกสาร pdf ด้วย fpdf นั้น จำเป็นจะต้องสร้างฟอนต์ภาษาไทยขึ้นมาก่อน ซึ่งก็เอาฟอนต์จากวินโดวนี่แหละครับไปผ่านกระบวนการบางอย่าง ในเว็บเขาแนะนำวิธีสร้างไว้อย่างละเอียด

แต่อย่าเพิ่งตกใจนะครับ ผมมีฟอนต์ให้ท่านดาวน์โหลดไปใช้ได้เลย ผมได้รับมาจากน้องเด่นแห่ง minddesizn.com ต้องขอขอบคุณไว้ ณ ตรงนี้ครับ

ดาวน์โหลดฟอนต์

ไฟล์ที่ท่านดาวน์โหลดไปประกอบด้วยฟอนต์ angsana,cordia และอีกหลายฟอนต์ครับ ผมไม่ค่อยรู้จักเท่าไร เพราะใช้แต่ angsana ยันเต มี angsana ผมก็สบายใจแล้ว ท่านดาวน์โหลดไปแล้วแตกซิปออก ลองเอานะครับว่ามีฟอนต์อะไรบ้าง จากชื่อน่าจะเดาไม่ยาก หรือถ้าไม่รู้จักก็ลองใช้ครับ ถ้าสวยชอบใจ ก็ใช้ต่อ ถ้าไม่ถูกใจก็อย่าไปใช้ Try it by yourself

การเขียนโค้ดจะมีกระบวนการดังนี้

1. ต้องตั้งชื่อตัวแปร CONSTANT เพื่อชี้พาธที่อยู่ฟอนต์

2. เพิ่มฟอนต์เข้าไปใน fpdf

3. เรียกใช้

ดูโค้ดกันก่อนครับ ตอนท้ายผมจะอธิบายคำสั่งที่ใช้

Live Demo

<?php
define('FPDF_FONTPATH','fonts/');
 
require('fpdf.php');
 
$pdf=new FPDF();
 
// เพิ่มฟอนต์ภาษาไทยเข้ามา ตัวธรรมดา กำหนด ชื่อ เป็น angsana
$pdf->AddFont('angsana','','angsa.php');
 
// เพิ่มฟอนต์ภาษาไทยเข้ามา ตัวหนา  กำหนด ชื่อ เป็น angsana
$pdf->AddFont('angsana','B','angsab.php');
 
// เพิ่มฟอนต์ภาษาไทยเข้ามา ตัวหนา  กำหนด ชื่อ เป็น angsana
$pdf->AddFont('angsana','I','angsai.php');
 
// เพิ่มฟอนต์ภาษาไทยเข้ามา ตัวหนา  กำหนด ชื่อ เป็น angsana
$pdf->AddFont('angsana','BI','angsaz.php');
 
//สร้างหน้าเอกสาร
$pdf->AddPage();
 
// กำหนดฟอนต์ที่จะใช้  อังสนา ตัวธรรมดา ขนาด 12
$pdf->SetFont('angsana','',12);
// พิมพ์ข้อความลงเอกสาร
$pdf->setXY( 10, 10  );
$pdf->MultiCell( 0  , 0 , iconv( 'UTF-8','cp874' , 'อังสนา ตัวธรรมดา ขนาด 12' ) );
 
$pdf->SetFont('angsana','B',16);
$pdf->setXY( 10, 20  );
$pdf->MultiCell( 0  , 0 , iconv( 'UTF-8','cp874' , 'อังสนา ตัวหนา ขนาด 16' )  );
 
$pdf->SetFont('angsana','I',24);
$pdf->setXY( 10, 30  );
$pdf->MultiCell( 0  , 0 , iconv( 'UTF-8','cp874' , 'อังสนา ตัวเอียง ขนาด 24' )  );
 
$pdf->SetFont('angsana','BI',32);
$pdf->setXY( 10, 40  );
$pdf->MultiCell( 0  , 0 , iconv( 'UTF-8','cp874' , 'อังสนา ตัวหนาเอียง ขนาด 32' )  );
 
$pdf->Output();
?>

fpdf จะใช้ตัวแปร constant ชื่อ FPDF_FONTPATH เป็นตัวชี้ที่อยู่ฟอนต์ จำเป็นจะต้องประกาศและกำหนดพาธให้ถูกต้อง ปิดท้ายด้วยเครื่องหมาย slash( / )

define('FPDF_FONTPATH','fonts/');

AddFont(string family [, string style [, string file]])

คำอธิบาย

สำหรับเพิ่มฟอนต์ที่ต้องการใช้งานในเอกสาร ท่านอาจจะงงๆว่า เรากำหนดได้เองเลยเหรอให้มันหนามันเอียง เปล่าหรอก พารามิเตอร์ตัวที่ 2 นั้นเป็นเหมือน ตัวอธิบายว่า ไฟล์ ในพารามิเตอร์ตัวที่ 3 นั้นเป็นฟอนต์ลักษณะไหน มันจะสัมพันธ์ไปถึงคำสั่ง SetFont ลองดูโค้ดแล้วนั่งคิดสักชั่วอึดใจประมาณธูปไหม้หมดดอก ท่านก็จะเข้าใจ

พารามิเตอร์ตัวที่ 3 เป็นชื่อไฟล์ที่ลงท้ายด้วย .php ถ้าท่านเปิดโฟลเดอร์ฟอนต์ที่ดาวน์โหลดไปตอนต้นบทความนี้ ท่านจะเห็น angsa.php (ตัวปกติ) angsab.php (ตัวหนา ลงท้ายด้วย b) angsai.php (ตัวเอียง ลงท้ายด้วย i) angsaz.php (ตัวหนาเอียง ลงท้ายด้วย z) และฟ้อนต์ชื่ออื่นในลักษณะนี้ ให้จำไว้ว่า ถ้าลงท้ายด้วย b มันเป็นฟอนต์ตัวหนา ลงท้ายด้วย i เป็นฟอนต์ตัวเอียง ลงท้ายด้วย z เป็นฟอนต์ตัวหนาเอียง

พารามิเตอร์

family : กำหนดชื่อ เราจะได้เรียกใช้ภายหลังง่ายๆ angsana ตัวปกติ ตัวหนา ตัวเอียง ตัวเอียงหนา จะใช้ชื่อ angsana เหมือนกัน
style : ลักษณะของฟอนต์

    ค่าที่เป็นไปได้คือ

  • empty string – ตัวอักษรปกติ empty string ก็คือ ‘’ ไม่มีอะไรเลยในฟันหนู
  • B: ตัวหนา
  • I: ตัวเอียง
  • BI หรือ IB: ตัวหนาเอียง

file : ไฟล์ฟอนต์ ถ้าพารามิเตอร์แรกท่านใช้ angsana พารามิเตอร์ตัวที่ 2 เป็นตัวหนา พารามิเตอร์ตัวนี้ก็ต้องชี้ไปที่ไฟล์ angsab.php

SetFont(string family [, string style [, float size]])

คำอธิบาย

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

พารามิเตอร์

family : ชื่อฟอนต์ที่ใช้คำสั่ง AddFont กำหนดไว้
style : ลักษณะของฟอนต์

    ค่าที่เป็นไปได้คือ

  • empty string – ตัวอักษรปกติ
  • B: ตัวหนา
  • I: ตัวเอียง
  • BI หรือ IB: ตัวหนาเอียง

size : ขนาดฟอนต์ที่จะพิมพ์ลงในเอกสาร

คำสั่ง AddFont กับ SetFont นั้นจะใช้งานควบคู่กัน และสัมพันธ์กันอยู่ ลองดูโค้ดด้านบนและหลับตาจินตนการดีๆ ก็จะเข้าใจ

fpdf นั้นมีข้อเสียเล็กๆอยู่ข้อหนึ่งคือ ยังไม่สนับสนุน utf-8 แต่ก็มีทางออกโดยใช้คำสั่ง iconv แปลงเอา ถึงจะมีความไม่สะดวกเล็กๆอยู่บ้าง แต่ผมเชื่อว่าสิ่งที่ได้จากการใช้ fpdf นั้นคุ้มครับ ยิ่งเมื่อนึกถึงความง่ายในการใช้งานแล้ว มันกลบความไม่สะดวกเล็กๆนี้ไปเลย

$pdf->MultiCell( 0  , 0 , iconv( 'UTF-8','cp874' , 'อังสนา ตัวหนาเอียง ขนาด 32' )  );