Наше приложение отправляет файлы ascii на принтер. Это приложение указывает с помощью Ctrl-O при запуске, что принтер должен печатать в 132 столбца. Я могу определить принтер pr01 для печати в 80 столбцов и pr01-132 для печати в 132 столбца и соответственно установить параметры по умолчанию.
lpoptions -p pr01-132 -o cpi=16.6 -o lpi=10
Что я пытаюсь сделать, так это когда я отправляю задание, диспетчер очереди печати должен принимать pr01-132, когда первым символом в файле является Ctrl-O, в противном случае - pr01.
Как я могу сделать это с помощью CUPS?
Кажется, ваше приложение не понимает, кто именно должен определять отображение документа. То, что он предшествует документу с символом SI, говорит о том, что он пытается контролировать сам рендеринг - [SI] выбирает сжатый режим печати на IBM DMP (требуется для печати 132 столбцов в портретной ориентации). Если предположить, что ваш принтер настроен и поддерживает эмуляцию IBM, тогда остается просто настроить новое устройство в чашках с использованием универсального драйвера ASCII.
Если ваши принтеры не поддерживают эмуляцию IBM, а общий драйвер не работает должным образом, вам, вероятно, придется удалить [SI] из файла. Видеть этот документ для получения подробной информации о том, как написать свой собственный фильтр. Он описывает процесс для файла DVI, но принцип тот же: сначала придумайте mimetype для ваших файлов, скажем application / vnd.local.proprinter, затем настройте рецепт для сопоставления «магических байтов» с mimetype (см. /etc/cups/mime.types), затем напишите сценарий для удаления начального [SI] и преобразования в ps (man a2ps).