J'avais également des fichiers PDF couleur numérisés et des fichiers PDF en niveaux de gris que je voulais convertir en bw. J'ai essayé d'utiliser gs
avec le code répertorié ici , et la qualité d'image est bonne avec du texte pdf toujours là. Cependant, ce code gs se convertit uniquement en niveaux de gris (comme demandé dans la question) et a toujours une grande taille de fichier. convert
donne de très mauvais résultats lorsqu'il est utilisé directement.
Je voulais des pdfs bw avec une bonne qualité d'image et une petite taille de fichier. J'aurais essayé la solution de terdon, mais je n'ai pas pu utiliser pdftk
centOS 7 en utilisant yum (au moment de la rédaction).
Ma solution utilise gs
pour extraire les fichiers bmp en niveaux de gris du pdf, convert
pour seuiller ces bmps pour bw et les enregistrer en tant que fichiers tiff, puis img2pdf pour compresser les images tiff et les fusionner toutes dans un pdf.
J'ai essayé d'aller directement au tiff depuis le pdf mais la qualité n'est pas la même donc j'enregistre chaque page en bmp. Pour un fichier pdf d'une page, convert
fait un excellent travail de bmp en pdf. Exemple:
gs -sDEVICE=bmpgray -dNOPAUSE -dBATCH -r300x300 \
-sOutputFile=./pdf_image.bmp ./input.pdf
convert ./pdf_image.bmp -threshold 40% -compress zip ./bw_out.pdf
Pour plusieurs pages, gs
peut fusionner plusieurs fichiers pdf en un seul, mais img2pdf
donne une taille de fichier plus petite que gs. Les fichiers tiff doivent être décompressés en entrée dans img2pdf. Gardez à l'esprit pour un grand nombre de pages, les fichiers bmp et tiff intermédiaires ont tendance à être de grande taille. pdftk
ou joinpdf
serait mieux s'ils peuvent fusionner des fichiers pdf compressés à partir de convert
.
J'imagine qu'il existe une solution plus élégante. Cependant, ma méthode produit des résultats avec une très bonne qualité d'image et une taille de fichier beaucoup plus petite. Pour récupérer le texte dans le pdf bw, réexécutez l'OCR.
Mon script shell utilise gs, convert et img2pdf. Modifiez les paramètres (nombre de pages, numérisation dpi, seuil%, etc.) répertoriés au début si nécessaire et exécutez chmod +x ./pdf2bw.sh
. Voici le script complet (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