Автоматический выбор бумаги с использованием PostScript - PullRequest
1 голос
/ 10 ноября 2011

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

EDIT

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

1 Ответ

1 голос
/ 10 ноября 2011

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

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

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

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

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

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

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

...