У меня есть процесс преобразования PDF-файлов в PCL для автоматической печати, но качество оставляет желать лучшего. Вот тестовый код, который я должен показать плохое качество:
gs -dBATCH -dNOPAUSE -q -sDEVICE=ljetplus -sOutputFile=grayscaletest.pcl -f grayscaletest.pdf
Вот как Grayscaletest.pdf выглядит до: И как Grayscaletest.pcl выглядит после:
Я понимаю, что он делает это из-за устройства ljetplus, но это единственное устройство, которое я нашел, которое будет работать для того, что мне нужно. Итак, я хочу преобразовать все оттенки серого в черный. Я попробовал решение, найденное здесь (Гитхаб) и здесь (суперпользователь), но ничего не сделал. Я даже не могу заставить это решение работать из PDF в PDF, оно остается прежним.
Версия GhostScript 9.06. Любая помощь в улучшении качества с помощью ljetplus или просто преобразовании всего в черно-белое без оттенков серого будет оценена по достоинству.
Ну, это черно-белый вывод, он был полутонирован для получения 1-битного вывода из 8-битного ввода. Независимо от того, что вы делаете, если ваше устройство поддерживает только 1-битный вывод, вам всегда придется применять какое-то экранирование для представления оттенков серого или цвета.
Вы не даете никаких подсказок относительно того, почему ljetplus — единственное устройство, которое вы можете использовать. Не зная, почему это будет трудно дать какой-либо конкретный совет.
Однако....
Первым делом обновите свою версию Ghostscript. Текущая версия — 9.27, той, которую вы используете, больше 6 лет.
Экран выглядит грубым, разрешение ljetplus по умолчанию составляет 300 dpi, подходит ли оно для вашего принтера? Если нет, вы захотите установить более высокое разрешение, это даст вам более качественный экран. В наши дни большинство устройств PCL имеют разрешение 600 dpi или выше.
Предполагая, что ваш PDF-файл не содержит полутонов, следующее, что нужно сделать, — это поэкспериментировать с параметрами экранирования, доступными в Ghostscript. Вы можете попробовать переключатели, описанные здесь:
https://www.ghostscript.com/doc/9.27/Use.htm#Rendering_parameters
Вы также можете использовать экранирование PostScript, но это сложнее реализовать, если вы уже не понимаете PostScript. Есть также стохастические экраны, доступные в Ghostscript, но я не знаю, насколько комфортно вы работаете с PostScript, и я не хочу идти по этому пути.
Вы, конечно, можете использовать Ghostscript для рендеринга в растровое изображение с высоким разрешением, смешать его с монохромным с помощью манипуляций с изображением по вашему выбору, а затем вывести обратно в PDF или PostScript, или в формат изображения, который у Ghostscript есть программа для чтения (например, viewpbm. ps в каталоге ghostpdl/lib).
ImageMagick, вероятно, может сделать все вышеперечисленные шаги за вас, а затем, когда у вас есть монохромный входной файл, вы можете просто запустить его через Ghostscript, чтобы получить выходной файл PCL.
Что ж, PXL — это совершенно другой язык, чем PCL, он более современный. Если вы используете «наименьший общий знаменатель» для всех своих принтеров, я боюсь, что вы столкнетесь с ухудшением качества по сравнению с исходным управлением принтерами. Если у вас нет парка старых принтеров, я был бы удивлен, если бы многие из них действительно имели разрешение 300 dpi. Если вы используете более 600 dpi принтеров с разрешением 300 dpi, то вы получите одну четверть количества оттенков серого, которые можно было бы использовать, что, очевидно, будет выглядеть хуже, чем необходимо.
У нас есть прекрасное сочетание действительно старых и действительно новых принтеров, и неизвестно, где их можно напечатать :) Я попробовал переключатели, которые вы связали, и ни один из них не сработал (вероятно, потому, что он все еще в 1-бит). Существуют ли какие-либо устройства, на которых я мог бы попытаться использовать эту печать как минимум в 8-битном режиме, которые работают с любым принтером с поддержкой PCL? Возможно, в более новой версии, чтобы я мог использовать это, чтобы убедить системного администратора?
В более новых версиях Ghostscript нет новых устройств для PCL, PCL — «зрелая» технология, поэтому нам не нужны новые устройства. Доступные устройства включают cdeskjet, cdj550, cdjcolor, cdjmono, deskjet, djet500, djet500c, laserjet, lj250, ljet2p, ljet3, ljet3d, ljet4, ljet4d, ljetplus. Я считаю, что все это принтеры PCL, есть также pjxl, pjxl300, pxlcolor и pxlmono, которые являются устройствами PCL XL. Боюсь, я не знаю, какой из них поддерживает цвет или оттенки серого навскидку. Я бы предложил увеличить разрешение до 600 в качестве первого шага.
Что касается обновления версии Ghostscript, то в используемой вами версии есть ряд критических уязвимостей, включая удаленное выполнение кода. Ваш системный администратор должен серьезно подумать об обновлении в срочном порядке. Вы также должны добавить -dSAFER в свою командную строку, если вы этого не сделаете, даже обновление до новой версии вам не поможет.
Изменение его на 600 DPI, безусловно, помогло. Я даже не думал об этом по умолчанию с очень низким DPI, и я не сложил два и два. Спасибо!
Я рад, что это помогло!
Хорошо, есть новая проблема, вызванная изменением разрешения, возможно, я просто делаю это неправильно - у меня есть немного PS, чтобы немного настроить поля, чтобы принтер не обрезал верх: -c "< </PageOffset [0-30]>> setpagedevice". Когда я не устанавливаю разрешение, это работает как шарм. Когда я указываю -r600, он полностью игнорирует мой PS-код... Я пытался изменить порядок команд, но безрезультатно. Есть ли другой способ, которым я должен установить разрешение?
Это должно сработать, но теперь вы смешиваете PostScript и PDF, так что в какой-то степени все ставки сняты. Вы можете попробовать не устанавливать разрешение с помощью -r и установить его с помощью вызова setpagedevice, добавив /HWResolution [600 600] в этот словарь.
Ни то, ни другое не сработало ... Я собираюсь опубликовать это как новый вопрос, так как он отклонился от оригинала. Я понял, что какие это делает, но не как это исправить.
ljetplus был единственным устройством, которое работало. Он должен работать на многих разных принтерах, и не все имеют одинаковую версию PCL. Когда я использую другие устройства, такие как pxlmono, это просто дает мне много страниц символов ASCII на большинстве принтеров, на которых я тестировал. Вероятно, я смогу убедить нашего системного администратора обновить GhostScript, но это может занять некоторое время. Мы рассмотрели ImageMagick в начале этого проекта, возможно, стоит изучить его снова. Вы правы, полагая, что у меня очень мало знаний о кодировании PS, но я готов его изучить. Я буду обновлять с тем, что я пытаюсь.