También tenía algunos archivos PDF en color escaneados y archivos PDF en escala de grises que quería convertir a bw. Intenté usarlo gs
con el código que se muestra aquí , y la calidad de imagen es buena con el texto en PDF todavía allí. Sin embargo, ese código gs solo se convierte en escala de grises (como se preguntó en la pregunta) y todavía tiene un gran tamaño de archivo. convert
produce resultados muy pobres cuando se usa directamente.
Quería archivos PDF con buena calidad de imagen y tamaño de archivo pequeño. Habría intentado la solución de terdon, pero no pude acceder pdftk
a centOS 7 usando yum (al momento de escribir).
Mi solución se utiliza gs
para extraer archivos bmp en escala de grises del pdf, convert
para limitar esos bmps a bw y guardarlos como archivos tiff, y luego img2pdf para comprimir las imágenes tiff y combinarlas en un solo pdf.
Intenté ir directamente a tiff desde el pdf, pero la calidad no es la misma, por lo que guardo cada página en bmp. Para un archivo pdf de una página, convert
hace un gran trabajo desde bmp a pdf. Ejemplo:
gs -sDEVICE=bmpgray -dNOPAUSE -dBATCH -r300x300 \
-sOutputFile=./pdf_image.bmp ./input.pdf
convert ./pdf_image.bmp -threshold 40% -compress zip ./bw_out.pdf
Para varias páginas, gs
puede combinar varios archivos PDF en uno, pero img2pdf
produce un tamaño de archivo más pequeño que gs. Los archivos tiff deben descomprimirse como entrada para img2pdf. Tenga en cuenta que para un gran número de páginas, los archivos intermedios bmp y tiff tienden a ser de gran tamaño. pdftk
o joinpdf
sería mejor si pueden fusionar archivos PDF comprimidos de convert
.
Me imagino que hay una solución más elegante. Sin embargo, mi método produce resultados con muy buena calidad de imagen y un tamaño de archivo mucho más pequeño. Para recuperar el texto en bw pdf, ejecute OCR nuevamente.
Mi script de shell usa gs, convert e img2pdf. Cambie los parámetros (número de páginas, ppp de escaneo,% umbral, etc.) enumerados al principio según sea necesario, y ejecútelos chmod +x ./pdf2bw.sh
. Aquí está el script completo (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