У мене також були відскановані кольорові pdfs та pdfs у кольорах сірого, які я хотів перетворити на bw. Я спробував з допомогою gs
з кодом , перерахованих тут , і якість зображення гарне з текстом в форматі PDF по- , як і раніше там. Однак, цей код gs перетворюється лише в масштаб сірого (про що йдеться в запитанні) і все ще має великий розмір файлу. convert
при безпосередньому використанні дає дуже погані результати.
Я хотів, щоб у форматі bw pdfs була хороша якість зображення та невеликий розмір файлу. Моє рішення використовує gs
для витягування файлів bmp у градаціях сірого з pdf, convert
для встановлення порогу цих файлів bw та збереження їх у вигляді файлів tiff, а потім img2pdf для стиснення зображень tiff та об'єднання їх у один pdf.
Я спробував перейти безпосередньо до tiff з pdf, але якість не однакова, тому я зберігаю кожну сторінку в bmp. Для файлу 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 в одну, але img2pdf
отримає менший розмір файлу, ніж gs. Файли tiff повинні бути нестисненими як вхід до img2pdf. Майте на увазі для великої кількості сторінок, проміжні файли bmp і tiff мають великі розміри. pdftk
або joinpdf
було б краще, якщо вони можуть об'єднати стислі файли PDF із convert
.
Я думаю, є більш елегантне рішення. Однак мій метод дає результати з дуже хорошою якістю зображення та значно меншим розміром файлу. Щоб повернути текст у pw 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