У меня возникла проблема с принтером 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 или перед отправкой на принтер?