สั่งพิมพ์เอกสาร PDF ด้วย TCPDF แล้วปรากฏข้อความแจ้ง Error
Message: Undefined offset: 132Filename: tcpdf/tcpdf.php
Line Number: 18650
ความผิดปกติก็คือ สามารถพิมพ์เอกสารได้ปกติ
แต่มีอยู่รายการเดียว ที่ไม่สามารถพิมพ์ได้ ดังนั้นจึงโฟกัสไปที่ข้อมูลในเอกสารชุดนั้น
เริ่มต้นจากการค้นหาจุดที่เกิดข้อผิดพลาด เนื่องจากไม่มีแจ้งว่าโค้ดบรรทัดไหนที่เราเขียนผิดพลาด แต่ข้อความแจ้งถึงส่วนข้างในไลบรารี่ TCPDF ที่เรานำมาใช้เท่านั้น
1. echo() เท่านั้นที่จะคลี่คลายข้อสงสัย หาจุดที่คิดว่าน่าจะเกิดข้อผิดพลาด แล้ววางโค้ดไปเลย อาจจะเริ่มจาก echo 11111; จนไปถึง echo 99999; หรือจะ echo 'AAAAAA'; ถึงจุดที่ 'ZZZZZ'; ก็ได้
2. มารันหน้าเว็บเพื่อดูผลลัพธ์กัน ว่าข้อความที่ echo ออกมาจะโผล่ตรงไหนบ้าง ในตัวอย่างข้อความ error ปรากฏขึ้นระหว่าง 5 กับ 6 ให้กลับไปดูโค้ดที่ตำแหน่งช่วงนั้น และปรับสโคปให้เหลือแคบที่สุดจนเจอต้นตอ
3. เมื่อรู้ว่าเกิดจาก writHTMLCell() ก็มาดูว่าอะไรที่ถูกเขียนออกมาแล้วทำให้ PDF ของเราทำงานผิดพลาด แต่ก่อนจะลัดไปถึงขั้นตอนที่ 7 เราลองมาไล่ดูใน Google กันก่อน
4. ลองคัดลอกข้อความแจ้ง error มาทั้งหมดแล้ววางไปใน Google แล้วกดค้นหาดูก่อน และปรากฏว่าไม่เจอสิ่งที่ค้นหา อาจจะเพราะคีย์เวิร์ดยังไม่โดน
5. งั้นเรามาทำให้แคบลงอีกนิด โดยเอาบรรทัดที่ระบุว่าเป็น tcpdf และ บรรทัดที่ error ในไลบรารี่ก็พอ
6. คำตอบที่ได้ก็ทำให้กระจ่างขึ้นมาอีกนิดว่าเป็นเพราะ HTML ของเรามีปัญหา เอาล่ะมาดูกันเลยว่ามันมีอะไรบ้างที่ทำให้เกิดข้อผิดพลาดในข้อมูลของเรา
7. ใช้คำสั่งแสดงผล echo $html ที่เรารับค่าจาก View ของ Controller ที่เขียนสร้าง PDF ส่วนนี้มาดูกันว่าพ่นอะไรออกมาบ้าง
8. เมื่อตรวจสอบดูก็พบว่า มีเครื่องหมายวงเล็บ < ซึ่งเป็น HTML TAG นั่นเองที่เป็นสาเหตุของข้อผิดพลาดครั้งนี้
9. ทำการแทนที่ HTML TAG ให้เป้นรหัสพิเศษที่แสดงผลเป็นวงเล็บในแบบเดียวกัน
10.จะได้รหัสที่ต้องการมาสองตัว คือ < และ > (สังเกตว่าด้านบนมีอักขระพิเศษอีก 3 ตัวที่ต้องแทนที่ด้วย ซึ่งถ้าไม่แทนที่ก็อาจจะจะเกิด error ได้เช่นกัน)
11.สร้างคำสั่งแทนที่ข้อความด้วย str_replace()
12. มารันหน้าเว็บดูผลลัพธ์กันอีกครั้ง ก็จะพบว่า error หายไปแล้วจ้า
ขอให้ทุกท่านสนุกกับการเขียนโปรแกรม
และมีสติกับการแก้บั๊กกันต่อไป สวัสดีครับ
:: อ้างอิง ::
TCPDF returning error while generating table structure to print
https://stackoverflow.com/questions/26159707/tcpdf-returning-error-while-generating-table-structure-to-print
htmlspecialchars
http://php.net/manual/en/function.htmlspecialchars.php
TCPDF HTML Tags <>Confusion
https://stackoverflow.com/questions/8585807/tcpdf-html-tags-confusion
ความคิดเห็น
แสดงความคิดเห็น