filtro CUPS para uma fila crua

1

Estou com problemas para descobrir como adicionar um filtro para uma fila crua no CUPS - se isso for possível.

Basicamente, o que eu 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 é lixo.

Eu preciso manter a configuração da impressora como uma fila crua e não posso adicionar uma segunda fila de impressão para a mesma impressora para a filtragem.

Existe alguma maneira de capturar um arquivo TIFF (desejavelmente para uma única impressora) e convertê-lo em PS antes de enviá-lo cru?

Isso seria algo que eu faria no mime.convs para o aplicativo bruto?

    
por BriGuy 26.06.2014 / 17:59

1 resposta

0

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.

    
por 30.06.2014 / 15:58