วันจันทร์ที่ 17 ตุลาคม พ.ศ. 2554

แปลง HTML เป็นไฟล์ PDF ด้วย HTML2PDF


หลายคนอาจจะรู้จัก FPDF คือตัวสร้างไฟล์.pdf เขียนด้วยPHP ในรูปแบบOOP แต่ก็เป็นเรื่องที่ค่อนข้างจะยุ่งยากต่อความเข้าของใครหลายๆคน เพราะต้องกำหนดจุดพิกัด ขนาด ความกว้าง เองทั้งหมด ผมก็เคยใช้อยู่พักนึง ปัญหาผมที่เจอก็คือ การสร้างตารางที่ต้องกำหนดความกว้างของตารางเอง และดึงข้อมูลจาก Database มาแสดง ซึงข้อมูลแต่ละแถวมีอักขระมากน้อยแตกต่างกันไป ทำให้เจอปัญหาก็คือ ข้อความที่อยู่ภายในแต่ละช่องของตารางจะล้นออกมา มันไม่ตัดแถวให้อัตโนมัติ ปัญหานี้จะหมดไปเพียงคุณเขียนคำสั่ง HTML และ CSS ได้แล้วส่งคำสั่งเข้าไปให้มันที่เหลือมันจะGanarate เป็นไฟล์ PDF ให้เราเองครับ มาดูวิธีสร้างไฟล์ PDF กันเลยครับ
1.ดาวน์โหลด โปรแกรม HTML2PDF มาก่อนครับ ตามลิงค์นี้ ->http://html2pdf.fr/en/default
2.ตั้งชื่อโฟลเดอร์ใหม่ซะ(จะไม่ตั้งก็ได้ แล้วแต่)เป็น exportpdf แล้วเอาไปเก็บไว้ในโฟลเดอร์โปรเจ็คของท่าน
3.วิธีเรียกใช้งาน แบบให้รองรับภาษาไทยด้วย
ให้กำหนดดังนี้

การทำให้ไฟล์ pdf แสดงผลเป็นภาษาไทยคือ กำหนด font style ให้เป็น font-family:freeserif นั้นเองครับ
ศึกษาเพิ่มเติมได้จากที่นี่ครับ ->http://wiki.spipu.net/doku.php?id=html2pdf:en:v4:accueil

12 ความคิดเห็น :

  1. ติดปัญหาเรื่องภาษาไทยตัว ภ ครับผม แสดงเป็นรูปสี่เหลี่ยม แก้ไขอย่างไรครับ

    ตอบลบ
  2. ผมก็เคยเจอปัญหานี้เเหมือนกันครับ พออัปโหลดขึ้น host จริงๆ กลับกลายเป็นว่าตัว ภ ใช้ได้เฉยเลยครับ อาจเป็นเพราะเครื่องของเราไม่ค่อยรองรับ font แบบ freeserif ก็ได้ครับ

    ตอบลบ
  3. ไม่น่าจะใช่ปัญหาที่เกิดจาก host ไม่รองรับ freeserif นะครับเพราะเคยทดลองส่งค่าเข้าไปที่ไฟล์ tcpdf.php ซึ่งเป็น class หลักของ html2pdf โดยไม่ใช้ผ่าน html2pdf.class.php มันสามารถ export ภ ออกมาได้นะครับ ผมลองจากตัวอย่างนี้ครับ http://www.webub.com/%E0%B8%9B%E0%B8%A3%E0%B8%B0%E0%B8%A2%E0%B8%B8%E0%B8%81%E0%B8%95%E0%B9%8C%E0%B8%AA%E0%B8%A3%E0%B9%89%E0%B8%B2%E0%B8%87%20pdf%20%E0%B9%84%E0%B8%9F%E0%B8%A5%E0%B9%8C%20%E0%B8%88%E0%B8%B2%E0%B8%81%20tcpdf%20class%20%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2%20php%20%E0%B8%A3%C3%A0-935-16.html

    ตอบลบ
  4. เมื่อกี้ผมได้ลองใช้ตัวสร้างไฟล์ PDF อีกตัวนึงชื่อ TCPDF ->http://www.tcpdf.org/
    สามารถแสดงผลตัวอักษร ภ ได้ไม่เพี๊ยนครับ หมายความว่าเป็นที่ตัวโปรแกรมของ HTML2PDF แล้วล่ะครับ ดังนั้นวิธีแก้ไขก็คือ ลองเปลี่ยนมาใช้ TCPDF ดูครับ

    ตอบลบ
  5. ผมมองว่าปัญหาไม่ได้อยู่ที่ตัว tcpdf ครับ เนื่องจากส่งค่าให้ tcpdf ตรงๆ ได้ไม่มีปัญหา แต่ปัญหาน่าจะอยู่ที่ html2pdf ใช้ช่วงที่แปลง html หรือ css ของ html2pdf.class ครับ กำลังหาวิธีแก้อยู่ครับ

    ตอบลบ
  6. ไม่ระบุชื่อ19 มีนาคม 2556 เวลา 17:25

    หาวิธีแก้ปัญหาได้แล้วครับ โดยใช้ฟังก์ชั่นนี้ใน layout ก่อนส่งค่าเข้าสู่ tcpdf

    function convert_unicode_number($str) {
    return str_replace('ภ', 'ภ', $str);
    }

    ขอบพระคุณ คุณไทน์ จาก www.itandhome.com

    ตอบลบ
    คำตอบ
    1. ไม่ระบุชื่อ19 มีนาคม 2556 เวลา 17:39

      ภ ตัวที่สอง ต้องเป็นรหัส unicode นะครับ คือ &#_3616_; เวลาเอาไปใช้ให้เอาเครื่องหมาย _ ออก เนื่องจากคอมเม้นท์นี้ไม่สามารถแสดงได้ เพราะมันจะถูกแปลงให้เป็น ภ อัตโนมัติ

      ลบ
  7. ไม่ระบุชื่อ19 มีนาคม 2556 เวลา 17:27

    วิธีแปลง font ของ html2pdf

    สามารถใช้ font ได้เกือบทุกชนิด

    1.คัดลอกโฟลเดอร์ utils จากโฟลเดอร์ html2pdf มาไว้ไดว์ D:
    2.คัดลอก font ที่ต้องการจากโฟลเดอร์ font ใน C:\WINDOWS\Fonts มาไว้ D:/utils จากที่เตรียมไว้
    3.เปลี่ยนชื่อ font ที่คัดลอกมาเป็นตัวอักษรเล็กทั้งหมด
    4.เข้า cmd ไปที่ path D:/utils
    5.ใช้คำสั่ง ttf2ufm -a -F myfont.ttf (จะได้ไฟล์มา 3 ไฟล์ที่ยังไม่สมบูรณ์)
    6.ใช้คำสั่ง php -q makefont.php myfont.ttf myfont.ufm (จะได้ไฟล์มา 3 ไฟล์ที่สมบูรณ์แล้ว)
    7.คัดลอกไฟล์ที่ได้ 3 ไฟล์ไปเก็บไว้ที่โฟลเดอร์ fonts ของ html2pdf เรียกใช้ใน html ได้เลย

    ตอบลบ
  8. ขอบคุณมากครับที่มาช่วยตอบแก้ปัญหาให้ ผมไม่ได้เล่นตัวนี้มานานแล้วครับ เพราะไม่ได้เอาไปใช้ประโยชน์อะไรเลย ก็เลยหยุดเล่น และเห็นมีคนบ่นปัญหาเรื่องตัว ภ แต่ก็ไม่มีใครแก้ไขให้ได้ (รวมถึงผม ^^'') ตอนนี้ปัญหานี้น่าจะเคลียร์ได้แล้ว และหวังว่าคงใช้งานได้สมบูรณ์ 100% แล้วนะครับ

    ตอบลบ
  9. คิดอยู่ผมอ่านแล้วไม่เข้าใจหรอกวิธีแก้หรือวิธีทำอะไร
    ผมเลยเข้าไปรื้อ
    ใน class HTML2PDF && HTML2PDF_parsingHtml
    ก้อได้เรียบร้อยครับ
    เอาตัวที่ต้องการแก้ มาใส่แท็ก พิเศษห่าอะไรก็ได้ +!@#$%^&* แทน "ภ" หรือห่าอะไรก็ได้ setHTML
    แล้วก็ มา place ทับด้วย "ภ" ในฟังก์ชัน _prepareTxt
    ไม่เข้าใจเมล์ มาถามได้ eak.ibanez@gmail.com

    ตอบลบ
    คำตอบ
    1. ใครที่คิดว่า php ต้องอาศัย browser สั่งงานอย่างเดียวคิดผิดครับ
      php run in background ได้..................
      ไม่ยากครัย

      ลบ
  10. ถ้ามีformของเอกสารอยู่แล้ว แต่อยากให้formนั้นเป็น pdf ต้องแก้ยังไงคะ

    ตอบลบ