Avevo anche alcuni PDF a colori digitalizzati e PDF in scala di grigi che volevo convertire in bw. Ho provato a utilizzare gscon il codice elencato qui e la qualità dell'immagine è buona con il testo pdf ancora lì. Tuttavia, quel codice gs viene convertito solo in scala di grigi (come richiesto nella domanda) e ha ancora file di grandi dimensioni. convertproduce risultati molto scarsi se usato direttamente.
Volevo pdf in bw con una buona qualità dell'immagine e dimensioni ridotte del file. Avrei provato la soluzione di Terdon, ma non sono riuscito pdftka utilizzare centOS 7 usando yum (al momento della stesura).
La mia soluzione utilizza gsper estrarre i file bmp in scala di grigi dal pdf, convertper sottrarre quei bmps a bw e salvarli come file tiff, quindi img2pdf per comprimere le immagini tiff e unirle tutte in un unico pdf.
Ho provato ad andare direttamente a TIFF dal pdf ma la qualità non è la stessa, quindi salvo ogni pagina in bmp. Per un file pdf di una pagina, convertfa un ottimo lavoro da bmp a pdf. Esempio:
gs -sDEVICE=bmpgray -dNOPAUSE -dBATCH -r300x300 \
-sOutputFile=./pdf_image.bmp ./input.pdf
convert ./pdf_image.bmp -threshold 40% -compress zip ./bw_out.pdf
Per più pagine, è gspossibile unire più file pdf in uno, ma img2pdfproduce file di dimensioni inferiori rispetto a gs. I file tiff devono essere decompressi come input per img2pdf. Tieni presente che per un gran numero di pagine, i file intermedi bmp e tiff tendono ad essere di grandi dimensioni. pdftko joinpdfsarebbe meglio se possono unire file PDF compressi da convert.
Immagino che ci sia una soluzione più elegante. Tuttavia, il mio metodo produce risultati con una qualità dell'immagine molto buona e dimensioni del file molto inferiori. Per recuperare il testo nel pdf di bw, eseguire nuovamente OCR.
Il mio script shell utilizza gs, convert e img2pdf. Modificare i parametri (n. Di pagine, dpi di scansione, soglia%, ecc.) Elencati all'inizio come necessario ed eseguire chmod +x ./pdf2bw.sh. Ecco lo 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