Saya juga memiliki beberapa pdf warna yang dipindai dan pdf abu-abu yang ingin saya konversi menjadi bw. Saya mencoba menggunakan gs
dengan kode yang tercantum di sini , dan kualitas gambar bagus dengan teks pdf masih ada. Namun, kode gs itu hanya mengkonversi ke skala abu-abu (seperti yang ditanyakan dalam pertanyaan) dan masih memiliki ukuran file yang besar. convert
menghasilkan hasil yang sangat buruk bila digunakan secara langsung.
Saya ingin pw bw dengan kualitas gambar yang baik dan ukuran file yang kecil. Solusi saya gunakan gs
untuk mengekstrak file bmp skala abu-abu dari pdf, convert
untuk membatasi bmps menjadi bw dan menyimpannya sebagai file tiff, dan kemudian img2pdf untuk mengompres gambar tiff dan menggabungkan semuanya menjadi satu pdf.
Saya mencoba langsung tiff dari pdf tapi kualitasnya tidak sama jadi saya menyimpan setiap halaman ke bmp. Untuk file pdf satu halaman, convert
lakukan pekerjaan yang hebat dari bmp ke pdf. Contoh:
gs -sDEVICE=bmpgray -dNOPAUSE -dBATCH -r300x300 \
-sOutputFile=./pdf_image.bmp ./input.pdf
convert ./pdf_image.bmp -threshold 40% -compress zip ./bw_out.pdf
Untuk beberapa halaman, gs
dapat menggabungkan beberapa file pdf menjadi satu, tetapi img2pdf
menghasilkan ukuran file yang lebih kecil daripada gs. File tiff harus dikompres sebagai input ke img2pdf. Ingatlah untuk banyak halaman, file bmp dan tiff menengah cenderung berukuran besar. pdftk
atau joinpdf
akan lebih baik jika mereka dapat menggabungkan file pdf terkompresi dari convert
.
Saya membayangkan ada solusi yang lebih elegan. Namun, metode saya menghasilkan hasil dengan kualitas gambar yang sangat baik dan ukuran file yang jauh lebih kecil. Untuk mendapatkan kembali teks dalam bw pdf, jalankan OCR lagi.
Script shell saya menggunakan gs, convert, dan img2pdf. Ubah parameter (# halaman, pindai dpi, ambang batas%, dll) yang tercantum di awal sesuai kebutuhan, dan jalankan chmod +x ./pdf2bw.sh
. Berikut ini skrip lengkap (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