ข้างใน PDF: อ็อบเจกต์ สตรีม และตาราง cross-reference
PDF คือกราฟอ็อบเจกต์มีหมายเลข สตรีมบีบอัด และแผนที่ xref ของออฟเซ็ตไบต์ Get Info ตรวจไฟล์; Repair สร้างโครงสร้างใหม่เมื่อแผนที่นั้นพัง

PDF ไม่ใช่การเทหน้าแบนราบ แต่เป็นฐานข้อมูลเล็ก ๆ ของอ็อบเจกต์ที่มีหมายเลขกำกับ หลายตัวเก็บเป็นสตรีมบีบอัด และหาตำแหน่งด้วยตาราง cross-reference (xref) เพื่อให้โปรแกรมอ่านกระโดดไปอ็อบเจกต์หมายเลข 17 ได้โดยไม่ต้องสแกนทั้งไฟล์ เมื่อแผนที่นั้นพัง โปรแกรมอ่านจะบอกว่าไฟล์เสียหาย แม้ไบต์ของหน้ายังอยู่บนดิสก์
อ็อบเจกต์
ทุกอย่างที่น่าสนใจ ทั้งหน้า ฟอนต์ ภาพ เมตาดาตา และแคตตาล็อกเอกสาร ล้วนเป็นอ็อบเจกต์ที่มีหมายเลข หน้าชี้ไปที่ content stream กับทรัพยากรของหน้านั้น ทรัพยากรชี้ไปที่ฟอนต์และ XObject ส่วนแคตตาล็อกชี้ไปที่ต้นไม้หน้า เครื่องมือที่รวม หมุน หรือประทับตราจึงเขียนกราฟนั้นใหม่ ไม่ได้วาดพิกเซลใหม่
สตรีม
สตรีมคืออ็อบเจกต์ที่เพย์โหลดเป็นลำดับไบต์ และมักบีบอัดแบบ Flate เช่น ตัวดำเนินการเนื้อหาของหน้า ไฟล์ฟอนต์ที่ฝังไว้ และข้อมูลภาพ การเปิด PDF ในตัวแก้ข้อความจึงเห็นทั้งโทเค็น ASCII และบล็อบไบนารีปนกัน การขยายสตรีมโดยไม่เปลี่ยนหน้าตาจึงมีประโยชน์ตอนดีบัก Compress บนไซต์นี้บีบอัดสตรีมเหล่านั้นใหม่ด้วย qpdf ไม่ได้ลดตัวอย่างภาพหรือทำซับเซตฟอนต์
ตาราง cross-reference
ใกล้ท้ายไฟล์ทั่วไปมีส่วน xref (หรือ xref stream ในไฟล์รุ่นใหม่) เป็นรายการออฟเซ็ตไบต์ของแต่ละหมายเลขอ็อบเจกต์ โปรแกรมอ่านจึง seek ไปที่ออฟเซ็ตนั้นได้ การดาวน์โหลดที่ขาดกลางทาง การรวมไฟล์ที่ผิดพลาด และการบันทึกที่ค้างครึ่งทาง มักทิ้ง trailer ที่ชี้ไปออฟเซ็ตซึ่งไม่ตรงกับเนื้อหาจริงแล้ว พิกเซลของหน้าแรกอาจยังอยู่ แต่แผนที่ที่ใช้ค้นหา “หน้าแรก” กลับหายไป
นั่นคือเหตุผลที่การซ่อมโครงสร้างต่างจาก OCR หรือการปลดล็อก เพราะการซ่อมสร้างโครงสร้างภายในใหม่จากซากที่ยังใช้ได้ ไม่ได้ประดิษฐ์ภาพของหน้าที่หายไป และไม่ได้เดารหัสผ่าน
ตรวจก่อนเขียนใหม่
Get Info on PDF คืนรายงาน JSON เช่น จำนวนหน้า เมตาดาตา ฟอนต์ และรายละเอียดเชิงโครงสร้าง ไม่ใช่ PDF ที่แก้แล้ว ใช้เมื่อต้องรู้ว่ากำลังถือไฟล์อะไรอยู่ ก่อนบีบอัด แปลง หรือซ่อม
หากโปรแกรมอ่านปฏิเสธไม่ยอมเปิดไฟล์เลย ให้ลอง Repair PDF ซึ่งสร้างโครงสร้างใหม่รวมการกู้ cross-reference แต่ถ้าไฟล์เปิดได้แต่ข้อความสแกนเลือกไม่ได้ นั่นเป็นปัญหา OCR ไม่ใช่ปัญหา xref
ลำดับตัดสินใจสั้น ๆ
- ไฟล์เปิดไม่ได้ → Repair ก่อน
- ไฟล์เปิดได้ ต้องการข้อเท็จจริง (จำนวนหน้า ฟอนต์ สัญญาณการเข้ารหัส) → Get Info
- โครงสร้างดีอยู่แล้ว ต้องการไฟล์เล็กลงหรือข้อความที่อ่านได้จากสแกน → Compress เพื่อลดขนาด หรือ OCR เพื่อได้ Markdown ไม่ใช่รอบซ่อมอีกครั้ง
ทั้ง Get Info และ Repair รันได้โดยไม่ต้องมีบัญชี ส่วน op เดียวกันผ่าน HTTP ดู Developers และวิธีที่ Repair ต่างจากผลิตภัณฑ์ “recovery” เดสก์ท็อปแบรนด์อื่น ดู PDF Repair Online vs Recovery Toolbox searches