Я хотел бы преобразовать PDF-файл с некоторым цветным текстом и изображениями в другой PDF-файл только с черно-белым изображением, чтобы уменьшить его размеры. Более того, я хотел бы сохранить текст как текст, не превращая элементы страниц в изображения. Я попробовал следующую команду:
convert -density 150 -threshold 50% input.pdf output.pdf
нашел в другом вопросе ссылку , но он делает то, что мне не нужно: текст на выходе преобразуется в плохое изображение и больше не может быть выбран. Я попробовал с Ghostscript:
gs -sOutputFile=output.pdf \
-q -dNOPAUSE -dBATCH -dSAFER \
-sDEVICE=pdfwrite \
-dCompatibilityLevel=1.3 \
-dPDFSETTINGS=/screen \
-dEmbedAllFonts=true \
-dSubsetFonts=true \
-sColorConversionStrategy=/Mono \
-sColorConversionStrategyForImages=/Mono \
-sProcessColorModel=/DeviceGray \
$1
но это дает мне следующее сообщение об ошибке:
./script.sh: 19: ./script.sh: output.pdf: not found
Есть ли другой способ создать файл?
Ответы:
Пример GS
Команда,
gs
которую вы запускаете выше, имеет трейлинг,$1
который обычно предназначен для передачи аргументов командной строки в скрипт. Так что я не уверен, что вы на самом деле пытались, но я предполагаю, что вы пытались поместить эту команду в скриптscript.sh
:И запустите это так:
Не уверен, как вы настроили этот скрипт, но он должен быть исполняемым.
Что-то определенно не похоже на этот сценарий. Когда я попробовал это, я получил эту ошибку вместо этого:
Альтернатива
Вместо этого сценария я бы использовал этот из вопроса SU вместо этого.
Затем запустите это так:
источник
sProcessColorModel
какое должно бытьdProcessColorModel
.Я нашел сценарий здесь , что может это сделать. Это требует,
gs
что вы, кажется, есть, но такжеpdftk
. Вы не упомянули свой дистрибутив, но на системах на основе Debian вы сможете установить его сВы можете найти RPM для этого здесь .
После установки
pdftk
сохраните скрипт какgraypdf.sh
и запустите так:Это создаст файл с именем
input-gray.pdf
. Я включаю весь сценарий здесь, чтобы избежать гниения ссылок:источник
У меня также были некоторые отсканированные цветные PDF-файлы и PDF-файлы в градациях серого, которые я хотел преобразовать в BW. Я попытался использовать
gs
с кодом, перечисленным здесь , и качество изображения хорошее с текстом PDF все еще там. Однако этот код GS конвертируется только в оттенки серого (как задано в вопросе) и по-прежнему имеет большой размер файла.convert
дает очень плохие результаты при непосредственном использовании.Я хотел получить PDF-файлы с хорошим качеством изображения и небольшим размером файла. Я бы попробовал решение Тердона, но не смог получить
pdftk
доступ к centOS 7, используя yum (на момент написания).Мое решение использует
gs
для извлечения bmp-файлов в градациях серого из pdf,convert
пороговых значений bmp для bw и сохранения их в виде tiff-файлов, а затем img2pdf для сжатия tiff-изображений и объединения их всех в один pdf.Я попытался перейти непосредственно к PDF из TIFF, но качество не то же самое, поэтому я сохраняю каждую страницу в BMP. Для одностраничного PDF-файла
convert
отлично справляется с bmp в pdf. Пример:Для нескольких страниц,
gs
можно объединить несколько файлов PDF в один, ноimg2pdf
дает меньший размер файла, чем GS. Файлы TIFF должны быть распакованы как входные данные для img2pdf. Имейте в виду, что для большого количества страниц промежуточные файлы bmp и tiff обычно имеют большой размер.pdftk
илиjoinpdf
было бы лучше, если бы они могли объединять сжатые файлы PDF изconvert
.Я думаю, что есть более элегантное решение. Однако мой метод дает результаты с очень хорошим качеством изображения и гораздо меньшим размером файла. Чтобы вернуть текст обратно в bw pdf, снова запустите OCR.
Мой сценарий оболочки использует gs, convert и img2pdf. При необходимости измените параметры (количество страниц, dpi сканирования, пороговое значение% и т. Д.), Указанные в начале, и запустите
chmod +x ./pdf2bw.sh
. Вот полный скрипт (pdf2bw.sh):источник
RHEL6 и RHEL5, которые оба используют базовый Ghostscript в 8.70, не могут использовать формы команды, приведенные выше. Предполагая, что в качестве первого аргумента «$ 1» скрипт или функция ожидают файл PDF, следующее должно быть более переносимым:
Где выходной файл будет иметь префикс "grey_".
RHEL6 и 5 могут использовать CompatibilityLevel = 1.4, что намного быстрее, но я стремился к переносимости.
источник
sColorConversionStrategyForImages
переключателя нет .Я получаю достоверные результаты очистки отсканированных PDF-файлов до хорошего контраста с этим сценарием;
источник