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. Por isso, tenho uma impressora que funciona como um wrapper, que recebe os dados, converte a imagem e a envia para a impressora real.
Para conseguir isso, existe um pacote RPM do openSUSE que fornece um backend do pipe CUPS que pode ser usado com o CentOS. Este backend é usado como um tubo de linha de comando.
Eu baixei o RPM acima e extraí o script pipe. Este script copiado para /usr/lib/cups/backend/pipe
e tornado executável.
Eu, então, escrevi um pequeno script, que leva as informações de impressão passadas para ele, incluindo as opções de impressora do URI da impressora. Esse script faz a conversão da imagem (para essa tarefa, TIFF para PDF), se necessário, e 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
Eu, então, configuro uma impressora "wrapper" com a seguinte sintaxe de URI:
pipe:/path/to/cups-wrapper-script?actualPrinterName
Aqui, o backend pipe é usado. Ele chama o script em /path/to/cups-wrapper-script
com o argumento actualPrinterName
, que é usado para informar ao script para qual impressora real enviar o trabalho.