paulo1205
(usa Ubuntu)
Enviado em 07/12/2012 - 15:55h
O fato de a aplicação abrir LPT1 e escrever diretamente nela é chave para resolver o problema.
Você deve criar um mapeamento de LPT1 para o Wine, colocando uma entrada chamada "lpt1" dentro do diretório
.wine/dosdevices. A documentação do Wine fala em links simbólicos para um dispositivo local, como
/dev/parport0 ou coisa parecida, mas pode ser outro tipo de arquivo, até mesmo um arquivo local, inicialmente vazio, que você depois poderia copiar para outro lugar ou mesmo imprimir por meio de outro programa. Com isso, o que a aplicação imprimir será direcionado para esse arquivo. Só que, dependendo de como o arquivo for aberto -- e eu não conheço sua aplicação nem a WinAPI para dizer como será no seu caso -- a cada vez que a aplicação abrir o arquivo novamente, pode ser que o conteúdo anterior seja perdido.
Eu fiz um teste aqui que funcionou parcialmente (i.e. funcionou para tudo o que eu testei via linha de comando (
wineconsole cmd), mas imprimia uma mensagem de erro na janela de emulação de console assim que terminava de imprimir), e que pode ser a resposta final para você. Para tanto, seu Linux já deve ser capaz de imprimir com sucesso no servidor Windows via CUPS.
Essa solução foi a seguinte: em lugar de criar um arquivo ou link simbólico, eu criei uma FIFO com o comando
mkfifo. Logo em seguida, eu rodei o
lpr, para obter dados dessa FIFO e jogar na minha fila de impressão. Esse
lpr foi executado em loop, de modo que impressões sucessivas, tanto dentro da mesma sessão como em sessões diferentes, funcionaram corretamente.
$ mkfifo ${HOME}/.wine/dosdevices/lpt1
$ lpr -o raw -P myprinter ${HOME}/.wine/dosdevices/lpt1
No meu caso, minha fila de impressão
myprinter está na rede Windows, e o CUPS está configurado para usá-la. Acho que é semelhante ao que você tem por aí. Você só teria de trocar o nome da fila (aliás, se só tiver uma impressora ou uma que esteja configurada como impressora padrão, pode até omitir os argumentos
-P e
nome_da_fila). A opção "-o raw" é importante para que o CUPS não tente interpretar o formato dos seus dados para pré-renderizar a página para você (suponho que a aplicação já envie os comandos da EPSON para imprimir os campos de formulário (nota fiscal?) nas posições definitivas).