ข้ามไปที่เนื้อหาหลัก

การเพิ่ม Font ภาษาไทยอื่นๆ เข้าไปใช้งานใน MPDF


เนื่องมาจากผมได้มีโอกาสจับงานที่ต้องแปลงหน้าเว็บให้เป็น PDF ลองๆ หาข้อมูลก็ไปเจอเจ้าตัวนี้ MPDF ซึ่งจริงๆ แล้วก็มีให้ใช้งานอีกหลายๆ ตัว สาเหตุที่เลือกใช้งานตัวนี้เพราะมัน ค่อนข้างจะติดตั้ง และใช้งานง่าย และยังสามารถอ้างอิง CSS เข้ามาช่วยจัดหน้าตาใน PDF ได้อีกด้วย ซึ่งผลที่ได้เพี้ยนไปจากตัวจริงไม่มากครับ แต่ที่ทำให้เลือกใช้งานเพราะการเพิ่มฟ้อนท์ภาษาไทย เข้าไปนั้นค่อนข้างง่ายครับ เลยจะขอมาแนะนำดังนี้

  1.  เข้าไปในโฟลเดอร์ของ MPDF หาโฟลเดอร์ที่ชื่อ /ttfonts
  2. จากนั้นเอาฟ้อนที่เราต้องการใช้งาน Copy ไปเก็บไว้ในโฟลเดอร์นั้น
  3. แก้ไขไฟล์ config_fonts.php ซึ่งจะเก็บส่วนของการตั้งค่าตัวอักษรไว้ทั้งหมด เลื่อนไปหาในส่วนตัวแปรที่เก็บค่าฟ้อนท์ไทยเอาไว้ แล้วเขียนต่อจากของเดิม โดยเขียนตามโค้ดด้านล่าง
    "THSaraban" => array(
            'R' => "THSaraban.ttf",
            'B' => "THSaraban Bold.ttf",
            'I'  => "THSaraban Italic",
            'BI'   =>  "THSaraban BoldItalic"
            )
    
  4. จากนั้นเข้าไปแก้ไขไฟล์ config_cp.php เข้าไปตรงที่เป็นเงื่อนไขของภาษาไทย โดยเพิ่มตัวแปรที่เราเพิ่งสร้างลงไปให้ครบตามที่เราต้องการใช้
    CASE "th":  $unifonts = "garuda, garudaB, garudaI, garudaBI, norasi, norasiB, norasiI, norasiBI, THSaraban,THSarabanI, THSarabanB, THSarabanBI";  break;
  5. เวลาใช้งาน เรียกคลาสโดยประกาศ ด้วยเงื่อนไขภาษาไทย
    $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 ที่สร้างขึ้นมา ก็จะแสดงฟ้อนท์ ในแบบที่เราต้องการครับ ไม่ยากเลยไช่ไหม? ลองเอาไปทำกันดูนะครับ ที่นำมาเขียนเพราะว่าเนื้อหาที่เป็นภาษาไทยยังมีน้อย เลยช่วยเขียนเพิมอีกแหล่งจะได้หาเจอง่ายๆ




ความคิดเห็น

  1. ขอบคุณมากเลยค่ะ แต่ว่าเราลอง add font angsana แล้วปรากฎว่า วรรณยุกต์มันซ้อนทับกับสระอ่ะค่ะ ไม่ทราบว่าเป็นเหมือนกันหรือเปล่าคะ

    ตอบลบ
    คำตอบ
    1. ลองแต่ ไทยสารบรรณ อย่างเดียวเลยครับ เด๋วยังไงจะลองดูนะครับ ได้ผลยังไงจะแจ้งอีกที ^ ^

      ลบ
  2. เอ่อ เราลอง add THSaraban มันก้อซ้อนทับเหมือนกันอ่ะค่ะ

    ตอบลบ
  3. ทำ CSS Font-Face หรือยังครับ?

    ตอบลบ
  4. สระลอย พอมีวิธีแก้ไขไหมครับ

    ตอบลบ

แสดงความคิดเห็น