
Estou tendo problemas para descobrir como adicionar um filtro para uma fila bruta no CUPS - se isso for possível.
Basicamente, o que preciso fazer é converter um TIFF em PS antes de enviá-lo para a fila bruta. A impressora não possui suporte TIFF integrado, portanto a saída é inútil.
Preciso manter a configuração da impressora como uma fila bruta e não posso adicionar uma segunda fila de impressão para esta mesma impressora para filtragem.
Existe alguma maneira de capturar um arquivo TIFF (de preferência para uma única impressora) e convertê-lo para PS antes de enviá-lo bruto?
Isso seria algo que eu faria no mime.convs para o aplicativo bruto?
Responder1
Eu encontrei uma solução para isso. Basicamente, estou criando uma nova impressora com um back-end personalizado, que me permite manipular os dados recebidos antes de enviá-los novamente. Portanto, tenho uma impressora atuando como wrapper, que recebe os dados, converte a imagem e depois a envia para a impressora real.
Para conseguir isso, existe um pacote openSUSE RPM que fornece umBack-end do tubo CUPSque pode ser usado com CentOS. Este back-end é usado como um canal de linha de comando.
Baixei o RPM acima e extraí o script do pipe. Este script foi copiado /usr/lib/cups/backend/pipe
e tornado executável.
Em seguida, escrevi um pequeno script que levará as informações de impressão passadas para ele, incluindo opções de impressora do URI da impressora. Este script faz a conversão da imagem (para esta tarefa TIFF em PDF), se necessário, e depois a envia para a impressora real.
#!/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
Em seguida, configurei uma impressora "wrapper" com a seguinte sintaxe de URI:
pipe:/path/to/cups-wrapper-script?actualPrinterName
Aqui o back-end do pipe é usado. Ele chama o script at /path/to/cups-wrapper-script
com o argumento actualPrinterName
, que é usado para informar ao script para qual impressora real o trabalho deve ser enviado.