Фильтр CUPS для необработанной очереди

Фильтр CUPS для необработанной очереди

У меня возникли проблемы с тем, как добавить фильтр для необработанной очереди в CUPS — если это возможно.

По сути, мне нужно преобразовать TIFF в PS перед отправкой в ​​очередь raw. В принтере нет встроенной поддержки TIFF, поэтому на выходе получается мусор.

Мне нужно сохранить настройку принтера как необработанной очереди и не могу добавить вторую очередь печати для этого же принтера для фильтрации.

Можно ли как-то захватить файл TIFF (желательно для одного принтера) и преобразовать его в PS перед отправкой в ​​необработанном виде?

Стоит ли мне делать это в mime.convs для необработанного приложения?

решение1

Я нашел решение этой проблемы. По сути, я создаю новый принтер с пользовательским бэкэндом, который позволяет мне манипулировать входящими данными перед их повторной отправкой. Таким образом, у меня есть один принтер, работающий как оболочка, который получает данные, преобразует изображение, а затем отправляет его на настоящий принтер.

Для этого существует пакет RPM openSUSE, который предоставляетЗадняя часть трубы CUPSкоторый может использоваться с CentOS. Этот бэкэнд используется как конвейер командной строки.

Я скачал этот RPM выше и извлек скрипт pipe. Этот скрипт скопировал /usr/lib/cups/backend/pipeи сделал исполняемым.

Затем я написал небольшой скрипт, который будет брать переданную ему информацию о печати, включая параметры принтера из URI принтера. Этот скрипт выполняет преобразование изображения (для этой задачи TIFF в PDF), если это необходимо, а затем отправляет его на реальный принтер.

#!/bin/bash

FILE=${PIPE_BACKEND_ARGV6}

MIME_TYPE=$(file --mime-type "${FILE}" | awk '{print $2}')

if [[ $MIME_TYPE == *tiff ]]
  then
    tiff2pdf -o /tmp/printConv-$$.pdf "$FILE"

    FILE=/tmp/printConv-$$.pdf

    CONV=1

fi

lpr -P "$1" "${FILE}"

if [[ $CONV -eq 1 ]] 
 then
   rm "${FILE}"

fi

Затем я настраиваю принтер-«обертку» со следующим синтаксисом URI:

pipe:/path/to/cups-wrapper-script?actualPrinterName

Здесь используется бэкенд pipe. Он вызывает скрипт /path/to/cups-wrapper-scriptс аргументом actualPrinterName, который используется для указания скрипту, на какой именно принтер отправлять задание.

Связанный контент