วิธีการกลั่น / rasterize PDF ใน Linux


14

เรามีเครื่องพิมพ์ที่สำนักงานของเราซึ่งพิมพ์ไฟล์ PDF จากแท่ง USB มันพิมพ์ไฟล์ส่วนใหญ่ได้ แต่มันมีปัญหากับบางไฟล์โดยเฉพาะอย่างยิ่งไฟล์ที่สร้างขึ้นจาก Latex PDF บางตัวนั้นไม่ยอมพิมพ์ PDF บางตัวมันพิมพ์ด้วยตัวอักษรชนิด courier และบางส่วนก็พิมพ์ได้ดียกเว้นสมการ

ฉันกำลังมองหาวิธีที่จะ "กลั่น" PDF เป็นรูปแบบที่แน่นอนในการพิมพ์ ไม่ว่าจะโดยการทำให้ PDF เป็นปกติให้ง่ายขึ้นจนถึงจุดที่ renderer ใด ๆ จะทำให้มันถูกต้องหรือเพียงแค่ทำให้แต่ละภาพเป็นภาพแรสเตอร์ 600dpi ใน PDF (ฉันสามารถแบ่ง PDF เป็นภาพแรสเตอร์แยกกันและรวมเข้าด้วยกัน แต่ฉันต้องการบางอย่างที่สามารถเขียนสคริปต์ได้)

ขนาดไฟล์ที่ส่งออกไม่สำคัญตราบใดที่แน่ใจว่าพิมพ์มีขนาดกระดาษ A4 (หรือต้นฉบับ) และความละเอียด 300 ~ 600dpi


บางที pdf2ps อาจช่วยได้ถ้าเครื่องพิมพ์สนับสนุน postscript
frlan

มันควรจะเป็นเครื่องพิมพ์ PostScript แต่การสนับสนุนนั้นยิ่งกว่า PDF (และจะไม่พิมพ์ PS จากแท่ง USB)
Sampo

คำตอบ:


23

หลังจากลองใช้ตัวเลือกบางอย่างไม่สำเร็จเพื่อแสดงแบบอักษรเป็นโครงร่าง (รวมถึงคำถามนี้และ pstoedit) ฉันพบวิธีแปลง PDF เป็นรูปแบบ rasterized ได้อย่างง่ายดายโดยใช้ ImageMagick:

convert -density 600 +antialias input.pdf output.pdf

สิ่งนี้จะสร้างการเรนเดอร์ PDF ที่ 600 dpi โดยปิด antialias (ไม่จำเป็นต้องใช้ความละเอียดนั้น)

ไฟล์ที่ส่งออกมีขนาดใหญ่มาก (~ 30 MB สำหรับเอกสาร 8 หน้า) และช้ามากในการพิมพ์ แต่ควรทำงานตราบใดที่เครื่องพิมพ์มีหน่วยความจำเพียงพอที่จะแสดงเนื้อหา


1
ใช่ ฉันใช้สิ่งนี้เพื่อทำให้เลเยอร์ใน PDF ของฉันเรียบเพื่อความสำเร็จที่ยิ่งใหญ่ + antialias ไม่จำเป็นเพราะเรามีภาพเท่านั้น (มันไม่ได้สร้างความแตกต่าง) และฉันลดความละเอียดลงเหลือ 150 เพราะมันดูดีพอสำหรับการเก็บถาวรโดยไม่ต้องใช้พื้นที่มาก ขอบคุณ!
mlissner

2
โปรดทราบว่าconvertจะไม่รักษาเนื้อหาของแบบฟอร์มที่คุณอาจกรอกไว้ (ฉันต้องการแปลง PDF เป็น rasterize เพื่อให้แน่ใจว่าเนื้อหาของแบบฟอร์มนั้นเหมือนกันทุกที่โดยเฉพาะอย่างยิ่งมันจะถูกแสดงโดยผู้ชม PDF ทุกคนในตอนแรก) เพื่อรักษาเนื้อหาของฟอร์มให้ใช้evince(หรืออะไรก็ตาม แอปพลิเคชันที่คุณใช้ในการกรอกแบบฟอร์ม) เพื่อพิมพ์เอกสาร "เป็นไฟล์" - นี่เป็น PDF อีกรูปแบบหนึ่งซึ่งเนื้อหาแบบฟอร์มได้กลายเป็นส่วนหนึ่งของข้อความปกติ จากนั้นคุณอาจจะยังคง rasterize PDF ใหม่นี้ขึ้นอยู่กับความต้องการของคุณ
30863 balu เมื่อ

โปรดทราบว่านี่เป็นการเปิดการลดรอยหยักบน ( +antialias) แทนที่จะปิด ( -antialias)
xiii1408

ไม่+antialiasปิดใช้งานการลดรอยหยัก: imagemagick.org/script/command-line-options.php?#antialias
Sampo

1
ฉันต้องการปรับแต่ง imagemagick ( stackoverflow.com/questions/42928765/… ) เพื่อให้สามารถใช้งานได้
SteveSong

1

จากประสบการณ์ของฉันการใช้ imagemagick ไม่เสถียรกับความละเอียดสูงและ / หรือไฟล์ขนาดใหญ่ เครื่องพิมพ์หลายเครื่องสามารถทำได้ที่ 1200 dpi และสูงกว่าดังนั้นไฟล์ที่แปลงแล้วควรมีความละเอียดใกล้เคียงกัน ทางออกที่ดีกว่าคือการใช้pdf2djvuซึ่งเร็วกว่ามีประสิทธิภาพมากกว่าและสร้างไฟล์ที่มีขนาดซึ่งมักจะเป็นคู่แข่งกับ PDF ดั้งเดิมที่ 1200 หรือ 2400 dpi ไฟล์เหล่านี้สามารถดูและพิมพ์โดยใช้ okular หรือ evince

ตัวอย่าง:

pdf2djvu -d 2400 file.pdf > rastered.djvu

1

ฉันคิดว่าวิธีที่ฉันชอบในปัจจุบันคือ:

  1. ใช้ pdftoppm เพื่อแปลงไฟล์ PDF เป็นชุดรูปภาพ

    $ pdftoppm source.pdf เอาต์พุต -png

  2. ใช้ img2pdf เพื่อสร้างไฟล์ pdf จากภาพเหล่านั้น

    $ img2pdf * .png -o output.pdf

ข่าวดีก็คือคุณสามารถสร้างสคริปต์ทุบตีเพื่อทำให้กระบวนการทั้งหมดเป็นอัตโนมัติ

นี่คือสคริปต์ทุบตีที่จะกลั่นไฟล์ pdf ทั้งหมดในไดเรกทอรีและเก็บต้นฉบับไว้ในไดเรกทอรีใหม่ "ต้นฉบับ"

#!/bin/bash

mkdir "originals";
for filename in ./*.pdf; do
    pdftoppm "$filename" output -png
    mv "$filename" ./originals
    img2pdf *.png "-o" "$filename"
    rm *.png
done

เครดิต: img2pdf คำตอบ & pdftoppm คำตอบ & bash ช่วยเหลือสคริปต์: 1 & 2

(หมายเหตุด้านข้าง)คุณสามารถติดตั้ง img2pdf โดยใช้:

$ sudo apt ติดตั้ง img2pdf


-1

อีกทางเลือกหนึ่งคือการแปลงเป็นภาพผ่านสิ่งที่ชอบ

pdfimages

จากหน้า man "Pdfimages บันทึกภาพจากไฟล์ Portable Document Format (PDF) เป็น Portable Pixmap (PPM), Portable Bitmap (PBM) หรือไฟล์ JPEG Pdfimages อ่านไฟล์ PDF ไฟล์ PDF สแกนหนึ่งหน้าหรือมากกว่านั้นและ เขียนหนึ่งไฟล์ PPM, PBM หรือ JPEG สำหรับแต่ละภาพ, image-root-nnn.xxx โดยที่ nnn คือหมายเลขภาพและ xxx คือประเภทภาพ (.ppm, .pbm, .jpg) "

จากนั้นใช้ pdftk เพื่อแปลงกลับเป็น PDF https://www.pdflabs.com/docs/pdftk-cli-examples/

ในที่สุดพิมพ์ไฟล์นี้ เห็นได้ชัดว่าคำถามสำคัญคือวิธีสคริปต์นี้

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


3
pdfimages แยกภาพแรสเตอร์ฝังตัวจากไฟล์ PDF ไม่ได้แรสเตอร์ข้อความหรือกราฟิกแบบเวกเตอร์
Sampo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.