Avevo anche alcuni PDF a colori digitalizzati e PDF in scala di grigi che volevo convertire in bw. Ho provato a utilizzare gs
con 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. convert
produce risultati molto scarsi se usato direttamente.
Volevo pdf in bw con una buona qualità dell'immagine e dimensioni ridotte del file. La mia soluzione utilizza gs
per estrarre i file bmp in scala di grigi dal pdf, convert
per 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 su bmp. Per un file pdf di una pagina, convert
fa 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, gs
puoi unire più file pdf in uno, ma img2pdf
produce 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. pdftk
o joinpdf
sarebbe 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 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
scantailor