
У меня возникли проблемы с тем, как добавить фильтр для необработанной очереди в 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
, который используется для указания скрипту, на какой именно принтер отправлять задание.