Eu também tinha alguns PDFs coloridos digitalizados e PDFs em escala de cinza que queria converter para bw. Tentei usar gscom o código listado aqui e a qualidade da imagem é boa com o texto em pdf ainda lá. No entanto, esse código gs é convertido apenas em escala de cinza (conforme solicitado na pergunta) e ainda possui um tamanho de arquivo grande. convertproduz resultados muito ruins quando usado diretamente.
Eu queria PDFs BW com boa qualidade de imagem e tamanho pequeno de arquivo. Eu teria tentado a solução de Terdon, mas não consegui pdftkacessar o centOS 7 usando o yum (no momento da redação).
Minha solução usa gspara extrair arquivos bmp em escala de cinza do pdf, convertpara limitar esses bmps a bw e salvá-los como arquivos tiff e, em seguida, img2pdf para compactar as imagens tiff e mesclá-las em um único pdf.
Eu tentei ir diretamente para tiff do pdf, mas a qualidade não é a mesma, então eu salvei cada página em bmp. Para um arquivo pdf de uma página, convertfaz um ótimo trabalho de bmp para pdf. Exemplo:
gs -sDEVICE=bmpgray -dNOPAUSE -dBATCH -r300x300 \
-sOutputFile=./pdf_image.bmp ./input.pdf
convert ./pdf_image.bmp -threshold 40% -compress zip ./bw_out.pdf
Para várias páginas, gspode mesclar vários arquivos pdf em um, mas img2pdfgera um tamanho de arquivo menor que o gs. Os arquivos tiff devem ser descompactados como entrada para img2pdf. Lembre-se de que, para um grande número de páginas, os arquivos intermediários bmp e tiff tendem a ser grandes. pdftkou joinpdfseria melhor se eles pudessem mesclar arquivos pdf compactados convert.
Imagino que exista uma solução mais elegante. No entanto, meu método produz resultados com qualidade de imagem muito boa e tamanho de arquivo muito menor. Para recuperar o texto no PDF bw, execute o OCR novamente.
Meu script de shell usa gs, convert e img2pdf. Altere os parâmetros (número de páginas, dpi de digitalização,% de limite etc.) listados no início, conforme necessário, e execute chmod +x ./pdf2bw.sh. Aqui está o 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