ฉันยังมีไฟล์ PDF สีสแกนและไฟล์ PDF ระดับสีเทาที่ฉันต้องการแปลงเป็น bw ด้วย ฉันลองใช้gs
กับรหัสที่แสดงไว้ที่นี่และคุณภาพของภาพดีกับข้อความ pdf ที่ยังคงอยู่ อย่างไรก็ตามรหัส gs นั้นจะแปลงเป็นสีเทาเท่านั้น (ตามที่ถามในคำถาม) และยังมีขนาดไฟล์ใหญ่ convert
ให้ผลลัพธ์ที่แย่มากเมื่อใช้โดยตรง
ฉันต้องการไฟล์ PDF bw ที่มีคุณภาพของภาพที่ดีและขนาดไฟล์เล็ก โซลูชันของฉันใช้gs
เพื่อแยกไฟล์ bmp สีเทาจาก pdf convert
เพื่อกำหนด bmps เหล่านั้นเป็น bw และบันทึกเป็นไฟล์ TIFF จากนั้นimg2pdfเพื่อบีบอัดภาพ TIFF และรวมเป็นไฟล์ PDF เดียว
ฉันพยายามไปที่ tiff โดยตรงจาก pdf แต่คุณภาพไม่เหมือนกันดังนั้นฉันจึงบันทึกแต่ละหน้าเป็น bmp สำหรับไฟล์ pdf หนึ่งหน้าconvert
ทำได้ดีมากจาก bmp เป็น pdf ตัวอย่าง:
gs -sDEVICE=bmpgray -dNOPAUSE -dBATCH -r300x300 \
-sOutputFile=./pdf_image.bmp ./input.pdf
convert ./pdf_image.bmp -threshold 40% -compress zip ./bw_out.pdf
สำหรับหลาย ๆ หน้าgs
สามารถรวมไฟล์ PDF หลาย ๆ ไฟล์ไว้ในที่เดียว แต่img2pdf
ให้ขนาดไฟล์ที่เล็กกว่า gs ไฟล์ TIFF ต้องไม่ถูกบีบอัดเป็นอินพุตให้กับ img2pdf โปรดทราบว่าหน้าเว็บจำนวนมากไฟล์ bmp และ tiff ระดับกลางมักจะมีขนาดใหญ่ pdftk
หรือjoinpdf
จะดีกว่าถ้าพวกเขาสามารถผสานไฟล์ PDF convert
บีบอัดจาก
ฉันคิดว่ามันมีทางออกที่ดีกว่า อย่างไรก็ตามวิธีการของฉันให้ผลลัพธ์ที่มีคุณภาพของภาพที่ดีมากและขนาดไฟล์เล็กลงมาก หากต้องการรับข้อความกลับใน bw pdf ให้เรียกใช้ OCR อีกครั้ง
เชลล์สคริปต์ของฉันใช้ gs, แปลงและ img2pdf เปลี่ยนพารามิเตอร์ (# ของหน้าเว็บสแกน dpi เกณฑ์% ฯลฯ ) ของ บริษัท chmod +x ./pdf2bw.sh
จดทะเบียนในการเริ่มต้นตามความจำเป็นและการทำงาน นี่คือสคริปต์แบบเต็ม (pdf2bw.sh):
#!/bin/bash
num_pages=12
dpi_res=300
input_pdf_name=color_or_grayscale.pdf
bw_threshold=40%
output_pdf_name=out_bw.pdf
#-------------------------------------------------------------------------
gs -sDEVICE=bmpgray -dNOPAUSE -dBATCH -q -r$dpi_res \
-sOutputFile=./%d.bmp ./$input_pdf_name
#-------------------------------------------------------------------------
for file_num in `seq 1 $num_pages`
do
convert ./$file_num.bmp -threshold $bw_threshold \
./$file_num.tif
done
#-------------------------------------------------------------------------
input_files=""
for file_num in `seq 1 $num_pages`
do
input_files+="./$file_num.tif "
done
img2pdf -o ./$output_pdf_name --dpi $dpi_res $input_files
#-------------------------------------------------------------------------
# clean up bmp and tif files used in conversion
for file_num in `seq 1 $num_pages`
do
rm ./$file_num.bmp
rm ./$file_num.tif
done
scantailor