ใช้ Ghostscript แต่บอกว่าไม่ต้องประมวลผลภาพซ้ำหรือไม่


30

ฉันมี PDF ที่ถูกบีบอัดแล้วและค่อนข้างรูปภาพ -y และฉันใช้ Ghostscript เพื่อเพิ่มหน้าชื่อเรื่องให้กับ PDF นั้น

อย่างไรก็ตามฉันไม่สามารถหาวิธีบอก GS ให้ใช้ภาพที่มีอยู่ตามเดิมได้โดยไม่ต้องทำการประมวลผลใหม่และตอนนี้ฉันรู้สึกราวกับว่ามันเป็นสิ่งที่เกี่ยวข้องกับวิธีการทำงานของ GS เช่นคุณไม่สามารถคอมไพล์ / ลิงก์ PDF โดยไม่ต้องปรับกระบวนการของรูปภาพใหม่

ฉันสามารถเพิ่มการตั้งค่า DPI ใน GS ได้ แต่จะเปลี่ยนจาก 5MB เป็น 60MB ในขณะที่ยังดูแย่กว่าเดิม

มีทางเลือกอื่นที่ดีกว่าสำหรับ GS ที่จะทำสิ่งที่ฉันต้องการ (โดยเฉพาะอย่างยิ่งที่จะรวบรวมใน OS X) หรือไม่?


คุณสามารถแก้ไขคำถามของคุณและเสนอราคา commandline ที่คุณใช้เพื่อเพิ่มหน้าชื่อหนังสือของคุณให้เป็น PDF ต้นฉบับได้หรือไม่ จากนั้นผมสามารถบอกคุณได้ว่าสิ่งที่มีการเปลี่ยนแปลงหรือเพิ่ม commandline ในการสั่งซื้อเพื่อให้ได้ผลผลิตที่ดีกว่าสำหรับภาพ ...
เคิร์ต Pfeifle

ฉันไม่ต้องการให้มันดูดีขึ้นฉันต้องการผสานโดยไม่ต้องปรับกระบวนการใหม่ สิ่งนี้จะก) ส่งผลให้มีคุณภาพดีขึ้น (การแปลงแบบไม่สูญเสียข้อมูล) และ b) ไม่ต้องเสียเวลาในการประมวลผลเวลา CPU ของเอกสารมากกว่า 1,000 หน้า
Mahmoud Al-Qudsi

1
สวัสดีคุณไม่ได้ตอบคำถามของฉันและคุณไม่ได้พูดคำสั่ง GS ที่แน่นอนที่คุณใช้ ซึ่งหมายความว่า: คุณจะไม่ได้รับความช่วยเหลือเกี่ยวกับ GS ที่คุณต้องการ ...
Kurt Pfeifle

คำตอบ:


44

หากคุณเพียงแค่ต้องการที่จะเชื่อมสองไฟล์ PDF โดยไม่ต้องปรับกระบวนการของเนื้อหาใด ๆpdftkสำหรับคุณ (สำหรับ Mac OS X สามารถใช้งานได้ผ่าน MacPorts หรือ Fink สำหรับ Linux มีแพ็คเกจดั้งเดิมสำหรับการแจกจ่ายที่สำคัญทั้งหมดสำหรับ Windows ดูที่นี่ ) ลองสิ่งนี้:

 pdftk title.pdf content.pdf cat output book.pdf

นี้จะย่อหน้าtitle.pdfไปcontent.pdfและเขียนผลลงในbook.pdf

pdftkเป็น "ใบ้" แต่เป็นวิธีที่รวดเร็วในการต่อไฟล์ PDF สองไฟล์ (หรือมากกว่า) เข้าด้วยกัน "โง่" ในขณะที่pdftkไม่ได้ตีความสตรีมข้อมูล PDF ในทางใดทางเพียงแค่ตรวจสอบให้แน่ใจว่าหมายเลขวัตถุภายในได้รับการปรับเปลี่ยนใหม่ตามความจำเป็นและปรากฏในxrefโครงสร้างPDF (ซึ่งโดยทั่วไปเป็น PDF ToCสำหรับ วัตถุ)

Ghostscript:

หากคุณต้องการใช้ Ghostscript คำสั่งพื้นฐานในการต่อเชื่อมไฟล์สองไฟล์เดียวกันคือ:

 gs \
  -o book.pdf \
  -sDEVICE=pdfwrite \
   title.pdf \
   content.pdf

อย่างไรก็ตามตามที่คุณพบบรรทัดคำสั่งพื้นฐานนี้อาจทำให้คุณภาพของภาพของคุณแย่ลง เหตุผลก็คือ Ghostscript ไม่ใช่ 'dump' เมื่อทำการประมวลผล PDF: มันตีความมันอย่างสมบูรณ์เมื่ออ่านและสร้างไฟล์ใหม่ทั้งหมดเมื่อเขียนผลลัพธ์ สำหรับการสร้างผลลัพธ์มันจะใช้การตั้งค่าเริ่มต้นโดยอัตโนมัติเพื่อดูรายละเอียดจำนวนมากในการประมวลผลโดยรวม ค่าเริ่มต้นเหล่านี้จะใช้กับทุกกรณีที่การร้องขอไม่ได้สั่ง Ghostscript ไว้เป็นอย่างอื่น

ดังนั้นวิธีการของ Ghostscript ในการสร้างbook.pdfใหม่นั้นมีความ "ฉลาด" มากกว่า แต่ก็ช้ากว่าpdftkวิธีของมันมาก (นี่เป็นเหตุผลว่าทำไม Ghostscript ในหลาย ๆ กรณีสามารถ - ภายในขีด จำกัด - "ซ่อมแซม" ไฟล์ b0rken PDF หรือเพื่อฝังฟอนต์ลงในไฟล์ PDF เอาต์พุตที่ไม่ได้ฝังอยู่ในอินพุต PDF หรือลบภาพที่ซ้ำกันแทนที่ พวกเขาโดยการอ้างอิงอื่น ๆ - และโดยรวมแล้วสร้างไฟล์ที่เล็กกว่าดีที่สุดที่ดีกว่าจากไฟล์ PDF ป่อง ... )

วิธีแก้ไขคือไม่ให้ Ghostscript ใช้ค่าเริ่มต้น: โดยการเพิ่มพารามิเตอร์ที่กำหนดเองเพิ่มเติมลงในบรรทัดคำสั่ง

มันหมายความว่าอะไร"Ghostscript 'ตีความ' ป้อนข้อมูลรูปแบบไฟล์ PDF ของมัน" ?

ไฟล์และเนื้อหาทั้งหมด (วัตถุ, สตรีม, แบบอักษร, ภาพ, ... ) จะถูกอ่านตรวจสอบและเก็บไว้ในการเป็นตัวแทนภายในของตัวเองก่อนที่จะแยก PDF ที่เป็นผลลัพธ์ออกมาพร้อมกับวัตถุ PDF ของมันอีกครั้ง อย่างไรก็ตามเมื่อ 'แยกออก' Ghostscript จะใช้การตั้งค่าเริ่มต้นภายในทั้งหมดสำหรับพารามิเตอร์หลายร้อย[*]ซึ่งมีอยู่

น่าเสียดายนี่เป็นสาเหตุให้คุณ "ประมวลผลภาพซ้ำ" ตามการตั้งค่าเริ่มต้นซึ่งสามารถหลีกเลี่ยงหรือลบล้างได้โดยการเพิ่มพารามิเตอร์บรรทัดคำสั่ง (ต้องการ) ของคุณเอง

ปัญหาภาพของคุณอาจเกิดจากความต้องการ Ghostscript (เนื่องจากปัญหาด้านลิขสิทธิ์) เพื่อเข้ารหัสภาพ JPEG2000 อีกครั้งเป็นการเข้ารหัส JPEG หากคุณต้องการหลีกเลี่ยงปัญหานี้เพิ่มสิ่งต่อไปนี้ใน commandline ของคุณ:

-dAutoFilterColorImages=false \
-dAutoFilterGrayImages=false \
-dColorImageFilter=/FlateEncode \
-dGrayImageFilter=/FlateEncode \

ตัวเลือก commandline ที่เกี่ยวข้องกับรูปภาพอื่น ๆ ที่ต้องพิจารณา ได้แก่ :

-dColorConversionStrategy=/LeaveColorUnchanged \
-dDownsampleMonoImages=false \
-dDownsampleGrayImages=false \
-dDownsampleColorImages=false \

ดังนั้น commandline Ghostscript ที่สมบูรณ์ที่สามารถทำให้คุณมีความสุขควรอ่าน:

 gs \
  -o book.pdf \
  -sDEVICE=pdfwrite \
  -dColorConversionStrategy=/LeaveColorUnchanged \
  -dDownsampleMonoImages=false \
  -dDownsampleGrayImages=false \
  -dDownsampleColorImages=false \
  -dAutoFilterColorImages=false \
  -dAutoFilterGrayImages=false \
  -dColorImageFilter=/FlateEncode \
  -dGrayImageFilter=/FlateEncode \
   title.pdf \
   content.pdf

คุณสามารถบอก Ghostscript ไม่ให้บีบอัดรูปภาพในไฟล์ PDF เอาต์พุตโดยใช้ commandline นี้:

 gs \
  -o book.pdf \
  -sDEVICE=pdfwrite \
  -dColorConversionStrategy=/LeaveColorUnchanged \
  -dEncodeColorImages=false \
  -dEncodeGrayImages=false \
  -dEncodeMonoImages=false \
   title.pdf \
   content.pdf

.


[*]:
หากคุณสนใจที่จะเรียนรู้เกี่ยวกับรายการการตั้งค่าเริ่มต้นทั้งหมดซึ่งอุปกรณ์pdfwriteของ Ghostscript ใช้อยู่ให้รันคำสั่งต่อไปนี้ ก็จะส่งกลับให้คุณเต็มรูปแบบรายการ:

 gs \
   -sDEVICE=pdfwrite \
   -o /dev/null \
   -c "currentpagedevice { exch ==only ( ) print == } forall"

สำหรับคำอธิบายเกี่ยวกับสิ่งที่ว่าทุกพารามิเตอร์เหล่านี้จะหมายความว่าคุณจะต้องอ่านในเอกสาร Adobe เกี่ยวกับ "Distiller พารามิเตอร์" Ghostscript พยายามอย่างหนักที่จะเลียนแบบสิ่งเหล่านี้ ...


3
(FYI) ในกรณีของฉันธงdEncodeColorImages, dEncodeGrayImages, dEncodeMonoImagesสาเหตุไฟล์ที่ส่งออกจะกลายเป็นมากขนาดใหญ่มากขึ้น ด้วยการลบขนาดไฟล์จะเปลี่ยนจาก 22MB เป็น 3.1MB และคุณภาพของภาพดูเหมือนกับการใช้ธงเหล่านี้ ทั้งหมดที่ไม่ซ้ำกันธงกับ I ใช้งาน: dColorConversionStrategy=/LeaveColorUnchanged, dDownsampleMonoImages=false, dDownsampleGrayImages=false, dDownsampleColorImages=false, dAutoFilterColorImages=false, dAutoFilterGrayImages=false, dColorImageFilter=/FlateEncode,dGrayImageFilter=/FlateEncode
Dor

@Kurt Pfeifle มีตัวเลือกอะไรบ้าง-dColorImageFilter? ฉันเท่านั้นที่สามารถค้นหาและFlateEncode DCTEncodeDCT ดูเหมือนจะทำ JPEG (เพราะเหตุใดพวกเขาจึงเข้ารหัสนั้น) ฉันคิดว่า FLATE เป็นตัวเลือกที่ล้าสมัยสำหรับรูปภาพในขณะนี้เนื่องจากสิทธิบัตร Bell Labs ใน LZW ไม่มีปัญหาอีกต่อไปแล้วใช่ไหม อย่างไรก็ตามหลังจากใช้เวลาค้นหาค่อนข้างนานฉันไม่สามารถหาวิธีใช้ PNG (หรือสิ่งอื่นใด) ... ภาพต้นฉบับของฉันคือ PNG และฉันต้องการให้พวกเขาไม่เปลี่ยนแปลง ฉันลองใช้ตัวเลือก -c แต่มันให้ฉัน-c can only be used in a built with POSTSCRIPT included....
Louis Somerset
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.