suporte para codificação utf-8 com lpr

11

Ao tentar enviar um arquivo de texto para a impressora via lprfrom xterm, o conteúdo foi corrompido além do reconhecimento, cuja causa acabou por ser atribuída à codificação do arquivo. Se eu processar o texto com iconv(por exemplo, iconv -f utf-8 -t ascii//TRANSLIT), o arquivo será impresso normalmente. Outra sugestão que me deparei é definir o formato do documento (por exemplo, lpr -o document-format=text/utf8), mas isso retorna o erro lpr: Unsupported document-format "text/utf8". Eu sempre poderia usar o lprcomando alias para incluir o processamento iconv, mas existe uma maneira mais geral de suporte nativo ao utf-8 no CUPS/ lprsystem?

Edit: Meu SO é Debian 8 e meu gerenciador de janelas é openbox(sem ambiente de desktop). Eu posso imprimir este arquivo sem nenhum problema no MacOS X e em um sistema Debian7 / Gnome3.

No meu sistema atual, devo salientar que, mesmo após alterar a codificação de caracteres de UTF-8 para ASCII, os caracteres de nova linha não são respeitados lpr, portanto as linhas são concatenadas e impressas até que a margem do papel seja atingida. Após a recodificação e transliteração iconvno MacOS X, a impressão ainda funciona normalmente (portanto, o problema da nova linha também é específico do meu sistema atual).

user001
fonte
1
Eu não tenho conhecimento profundo do CUPS, mas definitivamente deve incluir regras sobre como detectar o tipo de documento (com o tipo MIME na saída) e como traduzir qualquer para a impressora de destino, incluindo rasterização, formação de arquivo Postscript ou PCL, etc. seu tipo de impressora? Você tentou a2ps? Qual codificação é realmente usada na saída, quando você tenta utf-8? (Eu acho que é iso-8859-1)
netch
@ Netch: Obrigado por apontar o a2psfiltro. Eu não estava ciente disso. A impressora em questão é uma impressora a laser de digitalização HP4650. Como se pode determinar a codificação usada por CUPS? Os caracteres realmente impressos, que não têm relação discernível com a entrada, incluíam uma gama maiúscula grega, uma maiúscula C com uma cedilha, uma o com um circunflexo e uma capital latina W e T. Além disso, a falha em respeitar os resultados de caracteres de nova linha no truncamento da saída na margem do papel.
User001
Parece que a codificação aplicada é iso-8859-1. Você pode verificar isso facilmente usando sua tabela. Algumas pesquisas sugerem que a chamada lpr -o document-format='text/plain;charset=utf-8'será suficiente para imprimir como você deseja, mas isso não altera o padrão de instalação do CUPS, o que parece obsoleto.
Netch 29/08/14

Respostas:

1

O mesmo pode ser feito com paps;

#!/bin/bash
#This script converts UTF-8 txt to postscript
paps | lpr
Sometimes you need to specify the prinqueue;

#!/bin/bash
# This script converts UTF-8 txt to postscript
paps | lpr -P lj

Paps faz um trabalho muito melhor do que os topos de texto dos copos.

Thushi
fonte
Muito obrigado pela sua resposta. Estou ciente papse queria saber se havia a possibilidade de suporte nativo CUPSpara que dependências externas não precisem ser invocadas.
User001
1

Não sei se você considera o HPLIP uma dependência externa, mas aqui está a recomendação oficial do driver diretamente do CUPS.

Driver de impressora CUPS: HP4650

e aqui estão as informações do pacote no repositório Debian: HPLIPS

Como afirma Thushi, seu sistema não sabe como rasterizar o documento sem usar uma ferramenta como paps. Instalar o pacote hplip e configurá-lo http://localhost:631para usar o driver recomendado resolverá o seu problema. Para mais informações, consulte a entrada SystemPrinting no DebianWiki

eyoung100
fonte
Obrigado. Já tenho a versão mais recente do HPLIP no meu sistema. Tentei descobrir onde é possível especificar isso, http://localhost:631mas não encontrei nada sobre a seleção de drivers.
User001
Leia a Seção 4
eyoung100
0

Você deve ter algo como:

text/plain              application/postscript  33      texttops

no seu /etc/cups/mime.convsarquivo. Então, suponho que o que precisa ser feito seja corrigir o filtro de texttops. No Debian, é /usr/lib/cups/filter/texttops, que é um script de shell que usa o filtro texttopdf e o pdf2pscomando. Você pode tentar substituir a chamada texttopdf / pdf2ps por paps, mas observe que os argumentos não são os mesmos. O mínimo (como o texto é fornecido para a entrada padrão e o resultado ps é enviado para a saída padrão) seria uma linha contendo apenas:

paps

mas você pode querer adicionar opções, por exemplo:

paps --font='Monospace 10'

Nota: Eu não tentei. Apenas especulação ...

vinc17
fonte