Filtro CUPS para uma fila bruta

Filtro CUPS para uma fila bruta

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/pipee 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-scriptcom o argumento actualPrinterName, que é usado para informar ao script para qual impressora real o trabalho deve ser enviado.

informação relacionada