ระวัง! pdf-lib อาจแอบลบข้อมูลลูกค้าคุณทิ้งโดยไม่แจ้งเตือน

อ่าน 3 นาที 1 ผู้อ่าน

ระวัง! pdf-lib อาจแอบลบข้อมูลลูกค้าคุณทิ้งโดยไม่แจ้งเตือน

ทำไม pdf-lib ถึงลบข้อมูลของคุณทิ้ง

ถ้าคุณใช้ pdf-lib ในการสร้างเอกสาร PDF คุณต้องระวังให้ดี เพราะไลบรารี (ชุดคำสั่งที่เขียนไว้แล้วเพื่อช่วยให้ทำงานง่ายขึ้น) ตัวนี้อาจแอบลบตัวอักษรบางตัวในชื่อลูกค้าทิ้งไปโดยไม่บอกคุณเลย ผลคือคุณจะได้ PDF ที่เปิดอ่านได้ปกติ แต่ชื่อบริษัทหรือข้อมูลลูกค้าจะถูกตัดทอนจนผิดเพี้ยนไปโดยที่คุณไม่รู้ตัว

ปัญหามาจากฟอนต์มาตรฐานที่จำกัดเกินไป

PDF มีฟอนต์มาตรฐาน 14 แบบที่ทุกเครื่องอ่านได้โดยไม่ต้องฝังฟอนต์ลงไป แต่ฟอนต์พวกนี้รองรับแค่ภาษาอังกฤษและยุโรปตะวันตกเท่านั้น หากชื่อลูกค้ามีตัวอักษรพิเศษ เช่น Ł หรือ ź ระบบจะเกิดข้อผิดพลาดทันที

หลายคนแก้ปัญหาด้วยการเขียนโค้ดสั่งให้ลบตัวอักษรที่ระบบอ่านไม่ได้ทิ้งไป เพื่อให้โปรแกรมทำงานต่อได้โดยไม่พัง ซึ่งนี่คือจุดที่อันตรายที่สุด เพราะมันทำให้ข้อมูลลูกค้าหายไปโดยไม่มีการแจ้งเตือนใดๆ ในบันทึกการทำงาน (Log) เลย

วิธีแก้ปัญหาที่ถูกต้อง

ทางออกที่ดีที่สุดคือการฝังฟอนต์ (Embedding) เข้าไปในไฟล์ PDF เอง เพื่อให้คุณไม่ถูกจำกัดอยู่แค่ฟอนต์มาตรฐานยุคเก่า คุณควรใช้ @pdf-lib/fontkit เพื่อช่วยจัดการเรื่องฟอนต์ และเลือกใช้การทำ Subset (การดึงเฉพาะตัวอักษรที่ใช้จริงมาเก็บไว้) เพื่อไม่ให้ไฟล์มีขนาดใหญ่เกินความจำเป็น

นอกจากนี้ ใน Serverless Function (ระบบที่รันโค้ดเมื่อมีคำสั่งเข้ามาโดยไม่ต้องเปิดเซิร์ฟเวอร์ทิ้งไว้) คุณควรเก็บข้อมูลฟอนต์ไว้ในหน่วยความจำ (Cache) แทนการโหลดไฟล์ใหม่ทุกครั้ง เพื่อลดความหน่วงและประหยัดเวลาในการทำงาน

ตรวจสอบด้วยการแปลงเป็นภาพ

การดูแค่โค้ดไม่เพียงพอ เพราะปัญหาเรื่องข้อความล้นหน้ากระดาษหรือการวางตำแหน่งผิดพลาดมักไม่แสดงในบันทึกการทำงาน แนะนำให้ลองเขียนเทส (การทดสอบระบบ) โดยการแปลงหน้า PDF เป็นรูปภาพ (Rasterizer) แล้วเปิดดูด้วยตาตัวเอง วิธีนี้จะช่วยให้คุณเห็นข้อผิดพลาดที่ระบบตรวจไม่พบก่อนส่งงานให้ลูกค้าจริง

สรุปสั้นๆ

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

เรียบเรียงจากข่าวของ DEV Community อ่านข่าวต้นฉบับ ↗

← กลับไปหน้าข่าวสาร