จะทราบได้อย่างไรว่าไฟล์ PDF นั้นถูกบีบอัดหรือไม่และเพื่อ (un) บีบอัดไฟล์นั้น


18

ฉันเพิ่งเรียนรู้ว่าไฟล์ PDF สามารถบีบอัดเพื่อลดขนาดดิสก์

  1. ฉันสงสัยว่าจะรู้ได้อย่างไรว่าไฟล์ PDF ถูกบีบอัดอยู่แล้ว?
  2. แอปพลิเคชัน / คำสั่งใดที่สามารถใช้ในการบีบอัดหรือคลายการบีบอัดไฟล์ PDF

สภาพแวดล้อมของฉันคือ Linux Ubuntu 10.10


ความพยายามบางอย่างไม่ให้ผลลัพธ์ที่น่าพอใจ:

  1. นี่คือผลลัพธ์ของการลองpdftk:

    $ pdftk 3.pdf output 5.pdf uncompress 
    $ pdftk 3.pdf output 3comp.pdf compress 
    $ ls -l 3.pdf 3comp.pdf 5.pdf
    -rwxrwx--- 1 root plugdev  8652269 2011-07-30 12:27 3comp.pdf
    -rwxrwx--- 1 root plugdev  8652319 2011-07-29 22:15 3.pdf
    -rwxrwx--- 1 root plugdev 16829828 2011-07-30 12:27 5.pdf
    

    คุณสมบัติของไฟล์แสดงว่าทั้งหมดนั้นไม่ได้รับการปรับปรุง

  2. ผลลัพธ์ของการแปลงเป็น ps แล้วกลับไปเป็น pdf:

    $ pdf2ps 3.pdf 3.ps
    $ ps2pdf 3.ps 3c.pdf
    $ ls -l 3.pdf 3.ps 3c.pdf
    -rwxrwx--- 1 root plugdev   8808946 2011-07-30 13:14 3c.pdf
    -rwxrwx--- 1 root plugdev   8652319 2011-07-29 22:15 3.pdf
    -rwxrwx--- 1 root plugdev 122375966 2011-07-30 13:14 3.ps
    

ฉันไม่สามารถทดสอบได้ในขณะนี้เพราะผมไม่ได้มีการบีบอัดไฟล์ PDF ที่มือ fileแต่พยายาม ควรแสดงว่าไฟล์ถูกบีบอัดหรือไม่
polemon

1
@polemon: ขอบคุณ! มันไม่ได้ การนำออกใช้$file 3.pdfคือ3.pdf: PDF document, version 1.4
StackExchange สำหรับ All

โปรดทราบว่าแต่ละสตรีมในไฟล์ PDF สามารถบีบอัดได้ ดังนั้นการถามว่า "เป็นไฟล์ PDF ทั้งหมดที่ถูกบีบอัด" เป็นคำถามที่ผิด (แม้ว่าในหลายกรณีทั้งหมดหรือสตรีมส่วนใหญ่จะถูกบีบอัดหรือไม่บีบอัด)
dirkt

คำตอบ:


30

ในระยะสั้น:

หากต้องการทราบว่ามันถูกบีบอัดอยู่แล้ว:

strings your.pdf | grep /Filter

หากต้องการ (un) บีบอัด PDF ให้ใช้QPDF

qpdf --stream-data=compress your.pdf compressed.pdf
qpdf --stream-data=uncompress compressed.pdf uncompressed.pdf  

คำอธิบาย:

คำหลัก "ตัวกรอง" ในไฟล์ pdf เป็นตัวบ่งชี้วิธีการบีบอัดที่ใช้ บางส่วนของพวกเขาคือ:

CCITT G3 / G4 - ใช้สำหรับภาพขาวดำ
JPEG - อัลกอริธึมการสูญเสียที่ใช้สำหรับรูปภาพ
JPEG2000 - ทางเลือกที่ทันสมัยกว่าสำหรับ JPEG ซึ่งใช้สำหรับการบีบอัดภาพ
Flate - ใช้สำหรับการบีบอัดข้อความรวมถึงรูปภาพ
JBIG2 - ทางเลือก การบีบอัด CCITT สำหรับภาพขาวดำ
LZW - ใช้สำหรับการบีบอัดข้อความรวมถึงรูปภาพ แต่การแทนที่ด้วย Flate
RLE - ใช้สำหรับภาพขาวดำ
ZIP - ใช้สำหรับภาพโทนสีเทาหรือสี

(คัดลอกมาจากที่นี่ )

อย่างไรก็ตามเนื่องจากโครงสร้างไฟล์ PDF ที่ซับซ้อนส่วนใหญ่แล้วบางส่วน (หรือ "สตรีม") ของ PDF จะถูกบีบอัดอยู่แล้วในบางวิธี (และจะแสดงเมื่อ grepping / Filter) ในขณะที่บางส่วนจะไม่เป็นเช่นนั้น ไม่มีคำตอบใช่ / ไม่ใช่สำหรับคำถามว่า PDF นั้นถูกบีบอัดหรือไม่
วิธีหนึ่งที่จะเอาชนะนี้จะเพิ่ม-cตัวเลือกในการ grep ซึ่งส่งกลับจำนวนของเหตุการณ์ที่เกิดขึ้นเพื่อให้คุณสามารถมองเห็นค่อนข้างวิธีที่ดีที่ถูกบีบอัด ตัวอย่างเช่นถ้าส่งคืนน้อยกว่า 10 จะไม่บีบอัดstrings "large.pdf" | grep -c /Filter

สถานที่ให้บริการอื่นที่เกี่ยวข้องกับขนาดในรูปแบบไฟล์ PDF คือพวกเขาได้รับการปรับให้เหมาะสมสำหรับการเข้าถึงที่รวดเร็วหรือไม่ด้วยไฟล์ PDF "ที่ได้รับการปรับปรุง" ที่มีขนาดใหญ่กว่าเพื่อเสนอราคาจากวิกิพีเดีย :

รูปแบบไฟล์ PDF มีสองรูปแบบ - ไม่ใช่แบบเส้นตรง (ไม่ใช่ "ปรับให้เหมาะสม") และเป็นเส้นตรง ("ปรับให้เหมาะสม") ไฟล์ PDF ที่ไม่ใช่แบบเชิงเส้นใช้พื้นที่ดิสก์น้อยกว่าแบบเชิงเส้นแม้ว่าพวกเขาจะเข้าถึงได้ช้ากว่าเนื่องจากบางส่วนของข้อมูลที่จำเป็นในการรวบรวมหน้าเอกสารถูกกระจายไปทั่วไฟล์ PDF ไฟล์ PDF เป็น Linear (เรียกอีกอย่างว่า "ไฟล์ PDF ที่ปรับให้เหมาะสม" หรือ "เว็บที่เหมาะที่สุด") สร้างขึ้นในลักษณะที่ช่วยให้พวกเขาสามารถอ่านได้ในเว็บเบราเซอร์ปลั๊กอินโดยไม่ต้องรอให้ไฟล์ทั้งหมดดาวน์โหลดเนื่องจากเขียนลงดิสก์ แฟชั่นเชิงเส้น (ตามลำดับหน้า) ไฟล์ PDF อาจถูกปรับให้เหมาะสมโดยใช้ซอฟต์แวร์ Adobe Acrobat หรือ QPDF

คุณสามารถตรวจสอบว่ารูปแบบไฟล์ PDF pdfinfo your.pdfที่มีการเพิ่มประสิทธิภาพการใช้


ขอบคุณ! (1) ผลลัพธ์ของการใช้ qpdf คล้ายกับการใช้ pdftk: ด้วยการบีบอัดขนาดจริง ๆ แล้วก็ใหญ่ขึ้นเล็กน้อย (แปลก) และด้วยการคลายการบีบอัดขนาดก็ใหญ่ขึ้นเกือบเท่าตัว (2) pdftk และ gpdf พยายามทำสิ่งเดียวกันให้สำเร็จหรือไม่โดยใช้ตัวเลือกการบีบอัดและยกเลิกการบีบอัด
StackExchange สำหรับ All

@Tim: (ขอโทษที่ฉันไม่ได้อยู่ที่นี่) สำหรับ (1) ตามที่ผมอธิบายรูปแบบไฟล์ PDF ถูกบีบอัดแล้วบางส่วน (ส่วนใหญ่อาจ) ว่าทำไมการบีบอัดไม่ได้บันทึกมากเกินไป (และคลายทำให้มันใหญ่มาก, becouse มัน decompresses ทั้งหมดลำธารบีบอัด) (2) ส่วนใหญ่qpdfและpdftkทำสิ่งเดียวกันเกี่ยวกับการบีบอัด แต่ก็qpdfสามารถเพิ่มประสิทธิภาพได้เช่นกัน (รวมถึงสิ่งอื่น ๆ อีกมากมาย)
Philomath

10

pdftkเป็นเครื่องมือในการดำเนินการบางอย่างกับไฟล์ PDF เช่นการบีบอัด / คลายการบีบอัด:

$ pdftk test.pdf output compressed_test.pdf compress

ขอบคุณ! ฉันสงสัยว่าจะรู้ได้อย่างไรว่าไฟล์ pdf ถูกบีบอัดไว้หรือไม่
StackExchange สำหรับทุก

1
@Tim: pdfinfo file.pdfบอกคุณว่า PDF ได้รับการปรับให้เหมาะสมหรือไม่ อย่างไรก็ตามฉันไม่แน่ใจว่าหมายถึงการบีบอัดหรือไม่
โก้

1
@uloBasEI: ฉันลองใช้คำสั่งของคุณโดยใช้ pdftk เพื่อทำการบีบอัด แต่ขนาดนั้นแทบจะไม่เปลี่ยนเลย หากฉันคลายการบีบอัดขนาดไฟล์จะเพิ่มเป็นสองเท่า คุณสมบัติของไฟล์ต้นฉบับไฟล์บีบอัดและไฟล์ที่ไม่บีบอัดทั้งหมดแสดงว่าไม่ได้รับการปรับให้เหมาะสม
StackExchange สำหรับทุก

@nico: ขอบคุณ! ดูความคิดเห็นของฉันด้านบนและอัปเดตของฉัน ดูเหมือนว่าการบีบอัดและการเพิ่มประสิทธิภาพไม่ได้หมายความถึงกันและกัน?
StackExchange สำหรับทุก


1

ฉันพบวิธีการบีบอัดในไฟล์ pdf เปิด PDF พร้อมโปรแกรมแก้ไขข้อความ เรียกใช้ Search หรือ Find -enter CCITT หากไม่พบป้อน JPEG จากนั้นเลือก Flate ตามด้วย JBIG2 จากนั้น LZW จากนั้น RLE จากนั้น ZIP
ฟังดูแย่ไปกว่านั้น! ง่ายมากในการค้นหาวิธีการบีบอัดข้อมูลของสตรีม


นี่ค่อนข้างแน่นอน ฉันใช้วิธีการของคุณเพื่อตรวจสอบไฟล์ PDF ที่ไม่บีบอัด (ไม่บีบอัดโดย qpdf) โดยใช้grepเช่นเดียวกับgrep -E "(CCITT | JPEG | Flate | LZW | RLE | ZIP)" uncompressed.pdfและมันส่งคืนข้อความนี้ไฟล์ไบนารี ไม้ขีด ดูเหมือนว่าตรวจพบไฟล์ uncompressed.pdf เพื่อให้มีทั้งรูปแบบ LZW และ RLE
user91822

-1

เพียงตรวจสอบคุณสมบัติของมัน มันจะบอกว่าไฟล์ถูกบีบอัดหรือไม่


ฉันคิดว่าคำถาม Heidi คือโปรแกรมที่จะตรวจสอบคุณสมบัติด้วยโดยเฉพาะอย่างยิ่งกับโปรแกรมที่ใช้บรรทัดคำสั่งแบบสคริปต์
Caleb

> เพียงตรวจสอบคุณสมบัติ - โปรแกรม [โอเพ่นซอร์ส] ตัวใดตัวหนึ่งสามารถใช้ทำสิ่งนี้ได้
Maxim
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.