18

Аналогично этому вопросу:

Преобразовать PDF в оттенки серого в командной строке во FLOSS?

У меня есть PDF-документ, и я хочу преобразовать его в чисто черный и белый. Поэтому я хочу отказаться от полутонов. Для преобразования в оттенки серого с помощью ghostscript я могу использовать эту команду:

gs \
 -sOutputFile=output.PDF \
 -sDEVICE=pdfwrite \
 -sColorConversionStrategy=Gray \
 -dProcessColorModel=/DeviceGray \
 -dCompatibilityLevel=1.4 \
  input.PDF < /dev/null

Что мне нужно изменить, чтобы получить монохромный цвет, например, только черный и белый цвета, а полутонов нет?

6 ответов6

5

Последнее предложение действительно преобразуется только в оттенки серого и работает только в том случае, если базовый документ использует setrgbcolor. Это не сработало для меня, так как у меня был документ, который использовал setcolor.

У меня был успех с переопределением setcolor, чтобы всегда устанавливать цвет на 0,0,0:

gs -o <output-file.pdf> -sDEVICE=pdfwrite \
-c "/osetcolor {/setcolor} bind def /setcolor {pop [0 0 0] osetcolor} def" \
-f <input-file.ps>

Прошло более 15 лет с тех пор, как я выполнял любые взломы PostScript, поэтому вышеприведенное может быть неубедительным, неправильным или даже случайным - если вы знаете, как это сделать лучше, предложите.

3

Я не уверен, сработает ли следующее предложение ... но, возможно, стоит попробовать:

  1. конвертировать PDF в PostScript с помощью простой утилиты pdf2ps
  2. преобразовать этот PostScript обратно в PDF, используя переопределенный оператор PostScript /setrgbcolor

Это команды:

Первый

  pdf2ps color.pdf color.ps

Это дает вам color.ps как вывод.

второй

gs \
-o bw-from-color.pdf \
-sDEVICE=pdfwrite \
-c "/setrgbcolor{0 mul 3 1 roll 0 mul 3 1 roll 0 mul 3 1 roll 0 mul add add setgray}def" \
-f color.ps
3

Это не ghostscript, но с imagemagick это довольно просто:

 convert -monochrome input.pdf output.pdf
1

для серой шкалы PDF:

Используя GhostScript

В коде PHP используйте этот скрипт

exec("'gs' '-sOutputFile=outputfilename.pdf' '-sDEVICE=pdfwrite' '-sColorConversionStrategy=Gray' '-dProcessColorModel=/DeviceGray' '-dCompatibilityLevel=1.4'  'inputfilename.pdf'",$output);

полезный URL
http://www.linuxjournal.com/content/tech-tip-using-ghostscript-convert-and-combine-files

1

Похоже, это будет работать:

1) Конвертировать файл в монохромный с помощью gs

gs -sDEVICE=psmono \
  -dNOPAUSE -dBATCH -dSAFER \
  -sOutputFile=combined.ps \
  first.pdf \
  second.ps \
  third.eps [...]

3) Преобразуйте файл Postscript обратно в PDF с помощью ps2pdf или gs

(кредит: http://www.linuxjournal.com/content/tech-tip-using-ghostscript-convert-and-combine-files)

0

Для чистого черно-белого PDF вам нужно преобразовать его в формат ps, а затем в PDF для postscript:

exec(" gs -sDEVICE=psmono  -dNOPAUSE -dBATCH -dSAFER  -sOutputFile=combined.ps  $pdf");

постскриптум в PDF -> черно-белое

exec(" gs -sDEVICE=pdfwrite   -dNOPAUSE -dBATCH -dSAFER  -sOutputFile=file_pdf.pdf  filename.ps");

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .