Автоматический выбор бумаги с помощью PostScript

У меня возникла проблема с принтером PostScript 3 с несколькими лотками, загруженными бумагой формата A4 и A3. В Linux с использованием системы CUPS я теперь вручную устанавливаю правильный размер бумаги, указав опцию media=a4 или определив два отдельных принтера: один для A4 и один для A3.

Однако эта ситуация далека от оптимальной, так как вы всегда должны помнить о правильном выборе принтера.

Поскольку PostScript является полным по Тьюрингу языком, после прочтения Красной книги и Синяя книга У меня есть вопрос:

Можно ли изменить файл PPD принтера, чтобы создать параметр «автоматически выбирать размер бумаги», который, если он активирован, автоматически устанавливает правильный размер носителя? Может быть, в зависимости от размера ограничивающей рамки распечатки?

Может быть, что-то начинается так:

Код PostScript

% set pagesize A4
/setA4Paper {<</PageSize [595 842] >> setpagedevice} def
% set pagesize A3
/setA3Paper {<</PageSize [842 1190] >> setpagedevice} def
% decide which paper size to take based on the bounding box
% (array of two elements, width and height)
% if the bounding box is wider that A4 paper, pick A3 paper instead
boundingBox 0 get 595 gt {setA3Paper} {setA4Paper} ifelse

Подробные вопросы

  • Как получить информацию об ограничительной рамке страницы? Есть ли стандарт или дополнительная документация, которую я мог бы изучить?
  • Будет ли установка размера страницы, как в моем примере кода, достаточной для того, чтобы принтер выбрал правильный лоток?
  • Есть ли способ узнать из файла PPD принтера, какие команды PS необходимы для переключения лотков для бумаги? Кроме того, у этого принтера есть два лотка для каждого размера, поэтому было бы здорово, если бы принтер выбирал полный лоток, если в одном из них закончилась бумага.

ИЗМЕНИТЬ

Из ответа Кена кажется, что нет простого способа получить ограничительную рамку непосредственно из PostScript. Есть ли способ направить файл PS через пользовательский сценарий перед его отправкой обратно в очередь CUPS или перед отправкой на принтер?


person GorillaPatch    schedule 09.11.2011    source источник


Ответы (1)


Если это возможно, это то, что производитель обычно включает. Это требует, чтобы принтер знал, какой лоток содержит какой носитель. Некоторые принтеры имеют эту информацию, некоторые нет. Конечно, для некоторых принтеров это исправлено.

Для ваших подробных вопросов: 1) Ключ /PageSize в словаре устройства страницы имеет запрошенный в настоящее время размер носителя. Оператор setpagedevice используется для запроса мультимедиа (помимо всего прочего). если ваш файл PostScript не содержит операторов выбора мультимедиа (setpagedevice и т. д.), то он может содержать комментарии, которые дают BoundingBox. Большинство интерпретаторов проигнорируют их (это комментарии), но некоторые могут позволить вам их обработать. Как правило, это сильно зависит от устройства.

Невозможно (в PostScript) получить граничную рамку страницы, если задание не определяет ее, потому что это законно (и для принтеров требуется выпуск за обрез), чтобы вывод PostScript покрывал большую область, чем запрошенная/ предполагаемая среда.

2) Выбор конкретного лотка обычно зависит от устройства, вам нужно знать, как это делает ваше устройство. Хотелось бы думать, что производители учитывают ключ MediaPosition в словаре устройства страницы, но опыт говорит, что это маловероятно. YMMV

3) PPD может включать (а может и не содержать) код переключения лотков, вам придется посмотреть PPD и выяснить это. Что касается выбора полного лотка, если существующий пуст, это действительно выходит за рамки программы PostScript и зависит от реализации производителя. В устройствах уровня языка 3 клавиша TraySwitch в словаре устройства страницы управляет автоматическим переключением лотков, см. Справочное руководство по языку PostScript (3-е издание) стр. 403, поэтому, поскольку у вас есть устройство уровня 3, вам может повезти.

Поскольку вы уже используете CUPS, вы можете запустить исходный PostScript/PDF через Ghostscript, используя устройство bbox, которое даст вам ограничивающую рамку меток на странице. До тех пор, пока вы достаточно уверены, что вы (или ваши пользователи) не ставите метки за пределы границ медиа. Тогда вы могли бы использовать эту информацию, чтобы выбрать правильный «принтер», я думаю.

Предостережение: я очень мало знаю о CUPS.

person KenS    schedule 10.11.2011
comment
Спасибо за ваши идеи. Я думаю, что мне нужно перепроектировать, если в PPD есть код переключения лотков. Я думаю, что они должны быть, так как можно выбрать размер бумаги в настройках CUPS принтера. Также там указан носитель в каждом лотке. Мне кажется, что это немного сложнее, чем я думал. - person GorillaPatch; 10.11.2011