Intereting Posts
i3-wm сохраняет размер моей виртуальной машины Правило UDEV не запускается как заставить gnome использовать мою домашнюю папку в качестве папки рабочего стола? Почему iptables отбрасывает / регистрирует, даже если соответствующий пакет должен быть принят? Как изменить права доступа / владельца или удалить папку для скачивания (владелец: root wheel)? Как безопасно отключить сетевой ресурс на Linux STB без сбоев (я получаю GSOD)? вывод искажается при параллельном запуске «xargs ls» Сделать GAIM (Pidgin) ждать дольше, прежде чем запускать новый файл журнала для свободного чата? Сжатие нескольких строк из вывода Nmap Сохраните AWK FNR как переменную Bash, чтобы продолжить поиск из строки Создайте файл gzip с заданным размером Разрешить не-суперпользователям монтировать любую файловую систему История Bash в скрипте: `! #: *` Сортировка массива путей файлов по их базам wpa_supplicant не может установить essid и другие параметры из файла конфигурации

Как преобразовать PDF-файл из серого в черно-белый?

Моя ОС – Ubuntu 12.04. Как преобразовать PDF-файл из серого в черно-белый? PDF-файл в формате серого представляет собой сканирование с параметром «серый», а OCR – черно-белая шкала.


Обновить:

Следуя ответу Марко, BW pdf не очень хорош, и исходный файл находится здесь .

1) Используйте ghostscript для преобразования PDF в монохромный PostScript-файл с помощью psmono- устройства:

 gs -q -sDEVICE=psmono -o mono.ps input.pdf 

2) Затем преобразуйте монохромный PostScript в PDF:

 ps2pdf mono.ps 

EDIT: устройство psmono создает 1-битное полутоновое изображение, которое, по-видимому, не то, что вы хотите. Я не мог найти способ указать порог, используя ghostscript, поэтому я прибегнул к imagemagick. convert внутренне использует ghostscript для преобразования PDF. Затем он применяет пороговую фильтрацию для создания 1-битного изображения и снова использует ghostscript для создания PDF-файла. Поскольку конвертер использует разрешение 75DPI по умолчанию, что может не соответствовать вашему фактическому разрешению, вы можете предоставить аргумент density . И экспериментируйте с настройкой threshold . Оптимальные значения сильно зависят от входного файла.

 convert -density 150 -threshold 50% input.pdf output.pdf 

У меня также были некоторые отсканированные цветные pdf-файлы и черно-белые PDF-файлы, которые я хотел преобразовать в bw. Я пробовал использовать gs с кодом, указанным здесь , и качество изображения хорошо с текстом pdf. Однако этот код gs преобразуется только в оттенки серого (как задано в вопросе) и имеет большой размер файла. convert урожай очень плохие результаты при непосредственном использовании.

Мне нужны bw pdf-файлы с хорошим качеством изображения и небольшим размером файла. Мое решение использует gs для извлечения файлов в формате grayscale bmp из pdf, convert в порог этих bmps в bw и сохранения их в виде файлов tiff, а затем img2pdf для сжатия tiff-изображений и объединения их в один PDF-файл.

Я попытался перейти непосредственно к 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 .

Я думаю, что есть более элегантное решение. Однако мой метод дает результаты с очень хорошим качеством изображения и гораздо меньшим размером файла. Чтобы вернуть текст в формате 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 

Фактически, если это исходит из сканирования, единственным разумным способом является использование pdfimages и преобразование базовой графики. Я использовал этот скрипт для его преобразования:

 #!/bin/sh if [ -z "$1" -o -z "$2" ]; then echo "Syntax: $0 <input.pdf> <output.pdf>" exit 1 fi pdfimages "$1" scan for a in scan*.ppm; do convert -white-threshold 85% -monochrome $a `basename $a .ppm`.tiff done tiffcp scan*.tiff output.tiff tiff2pdf output.tiff -o "$2" -p A4 -F rm scan*.ppm scan*.tiff output.tiff