また、bwに変換したいスキャン済みカラーPDFとグレースケールPDFもいくつか持っていました。ここに記載されgs
ているコードを使用してみましたが、PDFテキストがまだ残っているため、画質は良好です。ただし、そのgsコードは(質問で尋ねられたように)グレースケールにのみ変換され、ファイルサイズはまだ大きくなります。convert
直接使用すると、結果が非常に悪くなります。
良い画像品質と小さなファイルサイズのbw pdfが欲しかった。私のソリューションではgs
、pdfからグレースケールbmpファイルを抽出し、bmp convert
をbwにしきい値化してtiffファイルとして保存し、次にimg2pdfを使用してtiff画像を圧縮し、すべてを1つのpdfにマージします。
pdfから直接tiffを実行しようとしましたが、品質が同じではないため、各ページをbmpに保存します。1ページのpdfファイルの場合、convert
bmpからpdfまで素晴らしい仕事をします。例:
gs -sDEVICE=bmpgray -dNOPAUSE -dBATCH -r300x300 \
-sOutputFile=./pdf_image.bmp ./input.pdf
convert ./pdf_image.bmp -threshold 40% -compress zip ./bw_out.pdf
複数のページの場合、gs
複数のPDFファイルを1つにマージできますが、img2pdf
ファイルサイズはgsよりも小さくなります。tiffファイルは、img2pdfへの入力として圧縮解除する必要があります。ページ数が多い場合は、中間のbmpおよびtiffファイルのサイズが大きくなる傾向があることに注意してください。pdftk
またはjoinpdf
、からの圧縮PDFファイルをマージできる場合は、より良いでしょうconvert
。
もっとエレガントな解決策があると思います。ただし、私の方法では、非常に良好な画質とはるかに小さいファイルサイズで結果が生成されます。テキストをbw pdfに戻すには、OCRを再度実行します。
私のシェルスクリプトでは、gs、convert、img2pdfを使用しています。最初にリストされているパラメーター(ページ数、スキャンdpi、しきい値%など)を必要に応じて変更し、を実行しchmod +x ./pdf2bw.sh
ます。完全なスクリプト(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