เนื่องมาจากผมได้มีโอกาสจับงานที่ต้องแปลงหน้าเว็บให้เป็น PDF ลองๆ หาข้อมูลก็ไปเจอเจ้าตัวนี้ MPDF ซึ่งจริงๆ แล้วก็มีให้ใช้งานอีกหลายๆ ตัว สาเหตุที่เลือกใช้งานตัวนี้เพราะมัน ค่อนข้างจะติดตั้ง และใช้งานง่าย และยังสามารถอ้างอิง CSS เข้ามาช่วยจัดหน้าตาใน PDF ได้อีกด้วย ซึ่งผลที่ได้เพี้ยนไปจากตัวจริงไม่มากครับ แต่ที่ทำให้เลือกใช้งานเพราะการเพิ่มฟ้อนท์ภาษาไทย เข้าไปนั้นค่อนข้างง่ายครับ เลยจะขอมาแนะนำดังนี้
- เข้าไปในโฟลเดอร์ของ MPDF หาโฟลเดอร์ที่ชื่อ /ttfonts
- จากนั้นเอาฟ้อนที่เราต้องการใช้งาน Copy ไปเก็บไว้ในโฟลเดอร์นั้น
- แก้ไขไฟล์ config_fonts.php ซึ่งจะเก็บส่วนของการตั้งค่าตัวอักษรไว้ทั้งหมด เลื่อนไปหาในส่วนตัวแปรที่เก็บค่าฟ้อนท์ไทยเอาไว้ แล้วเขียนต่อจากของเดิม โดยเขียนตามโค้ดด้านล่าง
"THSaraban" => array( 'R' => "THSaraban.ttf", 'B' => "THSaraban Bold.ttf", 'I' => "THSaraban Italic", 'BI' => "THSaraban BoldItalic" )
- จากนั้นเข้าไปแก้ไขไฟล์ config_cp.php เข้าไปตรงที่เป็นเงื่อนไขของภาษาไทย โดยเพิ่มตัวแปรที่เราเพิ่งสร้างลงไปให้ครบตามที่เราต้องการใช้
CASE "th": $unifonts = "garuda, garudaB, garudaI, garudaBI, norasi, norasiB, norasiI, norasiBI, THSaraban,THSarabanI, THSarabanB, THSarabanBI"; break;
- เวลาใช้งาน เรียกคลาสโดยประกาศ ด้วยเงื่อนไขภาษาไทย
$html = 'สวัสดีครับ'; $pdf = new mPdf('th', 'A4', '0', 'THSaraban'); $pdf->SetAutoFont(); $pdf->SetDisplayMode('fullpage'); $pdf->WriteHTML($stylesheet, 1); $pdf->WriteHTML($html, 2); $pdf->Output();
เพิ่มเติมอีกนิด การนำ CSS เข้ามาใช้งาน โดยการใช้คำสั่ง file_get_contents(ที่อยู่ไฟล์ CSS) แล้วประกาศ Class ตามโค้ดด้านล่าง โดย 1 หมายถึงการบอกว่าเอาเฉพาะ CSS ไม่ไช่หน้า HTML
$pdf->WriteHTML($stylesheet, 1);$pdf->WriteHTML($html, 2);
ปัญหาที่พบบ่อยๆ ก็คือ page ที่ใช้สำหรับแสดงผล PDF มักจะเอ๋อๆ ไป ควรไปปรับ Config ใน PHP เกี่ยวกับ init_memory หรือ กำหนดเอาในหน้านั้นเลยก็ได้ครับ
เพียงเท่านี้หน้า PDF ที่สร้างขึ้นมา ก็จะแสดงฟ้อนท์ ในแบบที่เราต้องการครับ ไม่ยากเลยไช่ไหม? ลองเอาไปทำกันดูนะครับ ที่นำมาเขียนเพราะว่าเนื้อหาที่เป็นภาษาไทยยังมีน้อย เลยช่วยเขียนเพิมอีกแหล่งจะได้หาเจอง่ายๆ
ขอบคุณมากเลยค่ะ แต่ว่าเราลอง add font angsana แล้วปรากฎว่า วรรณยุกต์มันซ้อนทับกับสระอ่ะค่ะ ไม่ทราบว่าเป็นเหมือนกันหรือเปล่าคะ
ตอบลบลองแต่ ไทยสารบรรณ อย่างเดียวเลยครับ เด๋วยังไงจะลองดูนะครับ ได้ผลยังไงจะแจ้งอีกที ^ ^
ลบเอ่อ เราลอง add THSaraban มันก้อซ้อนทับเหมือนกันอ่ะค่ะ
ตอบลบทำ CSS Font-Face หรือยังครับ?
ตอบลบสระลอย พอมีวิธีแก้ไขไหมครับ
ตอบลบใช้ฟ้อนอะไรครับ?
ตอบลบ