ทำไม PDF ของฉันถึงเล็กลงแทบไม่ได้
เอา PDF ไปผ่านตัวบีบอัดแล้วลดจาก 4.1 MB เหลือ 4.0 MB เครื่องมือเสียหรือเปล่า
PDF คือตู้เก็บเอกสาร
ภาพในหัวที่ทำให้ผิดหวังคือการคิดว่า PDF เป็นรูปถ่ายของเอกสาร มันไม่ใช่ PDF ตามที่นิยามไว้ใน ISO 32000 คือคอนเทนเนอร์ที่บรรจุอ็อบเจกต์ที่มีหมายเลขกำกับ ทั้งโครงสร้างต้นไม้ของหน้า สตรีมเนื้อหาที่เต็มไปด้วยคำสั่งวาด โปรแกรมฟอนต์ที่ฝังมา ภาพแบบ XObject ฟิลด์ฟอร์ม คำอธิบายประกอบ สารบัญ และตารางอ้างอิงไขว้ที่บอกว่าอ็อบเจกต์แต่ละตัวเริ่มตรงไหน
อ็อบเจกต์เหล่านั้นส่วนใหญ่ถูกบีบอัดไว้แล้ว สตรีมเนื้อหามักเข้ารหัสด้วย Flate ซึ่งเป็นอัลกอริทึมเดียวกับที่ไฟล์ ZIP ใช้ ภาพถ่ายที่ฝังมามักถูกเก็บเป็นสตรีมแบบ DCT ซึ่งก็คือข้อมูล JPEG ที่ผ่านเข้ามาโดยไม่ถูกเปลี่ยนแปลง ดังนั้นเวลาตัวบีบอัดอเนกประสงค์มองไปที่ PDF มันกำลังมองกล่องที่บรรจุของซึ่งแต่ละชิ้นผ่านการบีบอัดมาแล้วหนึ่งรอบ
หาให้เจอก่อนว่าไบต์อยู่ตรงไหน ก่อนจะบีบอัดอะไรทั้งนั้น
การวินิจฉัยที่มีประโยชน์ที่สุดอย่างเดียวคือการรู้ว่าคุณมีเอกสารชนิดไหนอยู่ในมือ เพราะมันทำนายผลลัพธ์ได้เกือบทั้งหมด
| ชนิดเอกสาร | ไบต์อยู่ตรงไหน | การบันทึกเชิงโครงสร้างทำอะไรได้ |
|---|---|---|
| รายงานข้อความจากโปรแกรมประมวลผลคำ | โปรแกรมฟอนต์ที่ฝังมาและสตรีมเนื้อหาขนาดเล็ก | ได้น้อยมาก เพราะเนื้อหาแน่นอยู่แล้ว |
| หน้าที่สแกนมา | ภาพขนาดใหญ่หนึ่งภาพต่อหนึ่งหน้า | แทบไม่ได้อะไรเลยถ้าไม่แตะภาพ |
| ไฟล์ส่งออกจากงานนำเสนอ | ภาพถ่ายที่ฝังมาและการไล่เฉดสี | ได้บ้าง หากภาพถูกใช้ซ้ำข้ามสไลด์ |
| แบบเขียนแบบทางวิศวกรรม | สตรีมเนื้อหาแบบเวกเตอร์ที่ยาวมาก | ได้บ้าง โดยเข้ารหัสสตรีมใหม่และลบอ็อบเจกต์ที่ไม่ถูกใช้ |
| ฟอร์มที่มีไฟล์แนบ | ไฟล์ที่ฝังมา JavaScript และพจนานุกรมคำอธิบายประกอบ | ได้เยอะ หากส่วนเสริมเหล่านั้นลบออกได้ |
การบันทึกเชิงโครงสร้างลบอะไรออกไปจริง ๆ
การบันทึกเชิงโครงสร้างคือการเขียนเอกสารขึ้นใหม่โดยไม่เปลี่ยนหน้าตาของหน้าใดเลย มันตัดอ็อบเจกต์ที่ไม่มีอะไรอ้างถึงอีกแล้วออกได้ ซึ่งเป็นของที่สะสมขึ้นทุกครั้งที่เอกสารถูกแก้และบันทึกแบบเพิ่มส่วนต่อท้าย มันบีบอัดตารางอ้างอิงไขว้และอัดอ็อบเจกต์เล็ก ๆ รวมไว้ในสตรีมอ็อบเจกต์ได้ และมันลบเมตาดาต้าของเอกสาร ภาพย่อ และประวัติการแก้ไขที่โปรแกรมผู้ผลิตบางตัวทิ้งไว้ได้
กับเอกสารที่ถูกแก้และบันทึกซ้ำมาหลายรอบ นั่นอาจเป็นชัยชนะก้อนใหญ่ แต่กับเอกสารที่ส่งออกมาอย่างสะอาดเพียงครั้งเดียวจากโปรแกรมประมวลผลคำ ไม่มีอะไรให้เก็บกวาด ไฟล์นั้นใกล้เคียงรูปที่เล็กที่สุดของตัวเองอยู่แล้ว และการลดไปหนึ่งร้อยกิโลไบต์จากสี่เมกะไบต์คือผลลัพธ์ที่ควรคาดหวังพอดี
ทำไมเอกสารข้อความถึงดื้อ
ใน PDF ที่เป็นข้อความ สัดส่วนใหญ่ของไฟล์มักเป็นฟอนต์ที่ฝังมา โปรแกรมฟอนต์คือไฟล์ไบนารีขนาดกะทัดรัดที่บรรจุเส้นขอบของตัวอักษรและคำสั่งจัดวางเส้น มันอยู่ตรงนั้นเพราะเอกสารต้องแสดงผลเหมือนกันเป๊ะบนเครื่องที่ไม่ได้ติดตั้งฟอนต์นั้น คุณบีบอัดมันให้หายไปไม่ได้ นอกจากจะตัดชุดตัวอักษรลงอีกหรือลบมันทิ้ง และการลบมันทิ้งเปลี่ยนหน้าตาของหน้า
ตัวข้อความเองนั้นเล็กจิ๋ว ข้อความร้อยหน้าคือตัวอักษรไม่กี่ร้อยกิโลไบต์ก่อนบีบอัดด้วยซ้ำ ถ้า PDF ข้อความของคุณใหญ่ ให้ไปดูที่ฟอนต์และภาพที่ซ่อนอยู่หลังข้อความ เช่น โลโก้ที่ซ้ำอยู่ในหัวกระดาษ หรือลายน้ำพื้นหลัง แทนที่จะไปดูที่ตัวหนังสือ
ทำไมไฟล์สแกนถึงยุบลงได้มาก
หน้าที่สแกนมาคือภาพถ่ายขนาดใหญ่ของแผ่นกระดาษหนึ่งแผ่น ซึ่งมักถ่ายมาที่ 300 จุดต่อนิ้วหรือมากกว่า หน้ากระดาษ A4 ที่ 300 DPI มีขนาดราว 2480 × 3508 พิกเซล คือเกือบเก้าล้านพิกเซล สำหรับหน้าที่มีเนื้อหาสารสนเทศเพียงข้อความไม่กี่กิโลไบต์ นี่คือเหตุผลที่ไฟล์สแกนตอบสนองต่อการบีบอัดแบบแรสเตอร์อย่างน่าตกใจ เพราะการลดความละเอียดในการเรนเดอร์และเข้ารหัสภาพของหน้าใหม่คือการโจมตีตรงส่วนที่ใหญ่จริง ๆ ของไฟล์
และนั่นก็เป็นเหตุผลที่โหมดนี้ทำลายข้อมูล เมื่อหน้ากลายเป็นภาพไปแล้ว ชั้นข้อความที่ค้นหาได้ ลิงก์ ฟิลด์ฟอร์ม คำอธิบายประกอบ โครงสร้างแท็กเพื่อการเข้าถึง และลายเซ็นดิจิทัลใด ๆ จะหายไปหมด FileSlimmer จึงจัดให้การแปลงเป็นแรสเตอร์เป็นโหมดแยกต่างหากที่ติดป้ายชัดเจนพร้อมคำเตือนนั้น แทนที่จะใช้เป็นทางออกเงียบ ๆ เมื่อการบันทึกเชิงโครงสร้างให้ผลไม่น่าพอใจ
ทำไมไม่มีใครรับประกันตัวเลขให้คุณได้
ขนาดเป้าหมายของ PDF คือการค้นหาบนความละเอียดในการเรนเดอร์และคุณภาพของภาพ และการค้นหานั้นมีเพดานล่าง เพราะต่ำกว่าความละเอียดระดับหนึ่ง ข้อความบนไฟล์สแกนจะอ่านไม่ออก ส่วนที่ว่าเอกสารหนึ่ง ๆ จะไปถึงงบที่กำหนดเหนือเพดานล่างนั้นได้หรือไม่ ขึ้นอยู่กับจำนวนหน้า ปริมาณหมึกบนหน้า สัดส่วนเนื้อหาที่เป็นภาพถ่าย และสัญญาณรบกวนจากเครื่องสแกน เอกสารสองฉบับที่มีจำนวนหน้าเท่ากันอาจจบลงที่ขนาดต่างกันมาก
พฤติกรรมที่ซื่อตรงคือหยุดที่เพดานล่างแล้วรายงานว่าการค้นหาหยุดตรงไหน ซึ่งเป็นสิ่งที่ค่าตั้งล่วงหน้าสำหรับขนาดเป้าหมายของ PDF ใน FileSlimmer ทำ เครื่องมือที่ทำตัวเลขที่คุณพิมพ์เข้าไปได้ทุกครั้ง ไม่ก็โกหกเรื่องตัวเลข ไม่ก็กำลังทำลายเอกสารเพื่อไปให้ถึงตัวเลขนั้น
ก่อนจะโทษเครื่องมือ
- ตรวจว่า PDF เป็นไฟล์สแกนหรือไม่ ลองลากเลือกข้อความสักบรรทัด ถ้าเคอร์เซอร์เลือกอะไรไม่ได้เลย แปลว่าทุกหน้าเป็นภาพ
- เทียบจำนวนหน้ากับขนาดไฟล์ ไฟล์ 40 MB ที่มีสามหน้าคือไฟล์ที่หนักไปทางภาพ ส่วนไฟล์ 40 MB ที่มี 900 หน้าอาจสมเหตุสมผลอยู่แล้ว
- ตรวจว่าเอกสารถูกเข้ารหัสลับไว้หรือไม่ PDF ที่ป้องกันด้วยรหัสผ่านจะปรับโครงสร้างไม่ได้เลยจนกว่าจะปลดล็อก
- ตรวจว่าเอกสารมีลายเซ็นหรือไม่ การเขียนเอกสารที่มีลายเซ็นขึ้นใหม่ทำให้ลายเซ็นใช้ไม่ได้ ซึ่งมักเป็นผลลัพธ์ที่แย่กว่าไฟล์ขนาดใหญ่
- ตรวจว่าคุณต้องการอะไรจริง ๆ การแยกเอาเฉพาะหกหน้าที่ต้องส่งออกมามักได้ผลดีกว่าการบีบอัดทั้งเก้าสิบหน้า
เครื่องมือสำหรับเรื่องนี้
แหล่งอ้างอิง
- ISO 32000-2 — Document management, Portable Document Format
- Adobe — PDF 32000-1:2008, the freely published PDF 1.7 specification
- PDF Association — ISO 32000 and the PDF standards family