Java e as impressoras matriciais

Ola pessoal, depois de dias e dias sem postar nada no blog, estou postando alguma coisa sobre Java dessa vez, especificamente sobre impressoras matriciais, aonde muitas pessoas, inclusive eu, já sofreram ou ainda sofrem, para fazer essa comunicação.

Qualquer aplicação que você for fazer via web, seja ela em html, php, java, asp, .net (ugh!), que necessite fazer impressões é um problema.

Relatórios são um sofrimento para quem vem do PHP (como eu). Tem que suar para fazer a implementação da FPDF ou da PDFlib, para geração de relatórios gráficos em PDF ou ainda tentar montar layouts via HTML que façam controle de páginas, cabeçalhos, rodapé, etc… ou seja, sofre mesmo.

Para quem está no Java (ufa!), pensa que vai se libertar disso tudo usando o Jasper com o iReport, que realmente ajuda MUITO na hora de gerar os relatórios, com opções de exportações, etc, realmente uma mão na roda, mas… Isso tudo ainda não está bom, existe a necessidade de impressão de documentos fiscais via web (Que ainda bem que vai acabar com a chegada nas NFe). E é ai que a coisa complica.

Pois é, usar as impressoras matriciais em um ambiente 100% web é um pouco complicado. Para que você possa imprimir em boa velocidade, é necessário enviar comandos em para impressora na sua linguagem, geralmente em padrão EPSON, de comandos para impressão em linhas e colunas, aonde voce atraves de caracteres ASCII define tipo de letra, fontes, avanço de papel, retorno, etc.

Há algum tempo eu tive essa necessidade de impressão de documentos fiscais. Depois de um pouco de pesquisas e troca de mensagens em foruns, optei por fazer a impressão através de um Applet.

O Applet em java, quando assinado pelo desenvolvedor e aceito pelo usuário (igual quando você aceita rodar o Applet do Banco do Brasil, por exemplo), pode acessar várias informações dentro do computador do usuário, inclusive esse tipo de periféricos. Dessa forma, é possivel que você acesse a impressora do usuário, ela estando conectada na maquina dele, ou ainda, ela estando conectada em alguma máquina da rede do usuário.

Depois desse teste de acesso, gastei um bom tempo criando uma classe que fizesse a leitura de um documento XML aonde qualquer aplicação que gerasse esse documento, e ativasse o applet para a leitura do mesmo, ele faria um parser, verificando as TAGs de mapeamento e de dados a serem impressos e o Applet enviaria os comandos para a impressora.

Depois disso funcionando no meu netbeans (na epoca eu ainda usava netbeans), eu tratei de descobrir como fazer a assinatura do Applet. Gerei minha chave e assinei o Applet usando o Jarsigner e pronto. Quando a aplicação chamou o Applet e passou o arquivo que ele deveria interpretar, a impressora foi ativada e a impressão começou.

Com o uso de applet’s, já foi possivel a criação de rotinas para impressão em impressoras matriciais, impressoras térmicas e leitores de biometria. O Applet é muito esquecido e um tanto quanto criticado quando você pensa em usá-lo, porém, apresenta resultados satisfatórios depois da implementação.

O próximo passo, é tentar fazer com que o Flex ative um applet! Mas como ando muito apurado, vou esperar essa situação ser obrigatória, dai eu penso em como fazer!

Abraços a todos!


15 Comments

  • Renan |

    Amigo você tem esse código?
    Ja estou a alguns dias tentando fazer isso funcionar…
    mas ate agora nada…

    Obrigado!

  • Antonio |

    Achei muito prática e interessante sua idéia de mediar a necessidade de impressão nos sistemas Web através de um Applet, estou passando por dificuldades semelhantes e talvez consiga chegar a alguma solução através deste método.
    Porem não faço a minima idéia de como conseguir minha assinatura digital, criptografia assimetrica nunca foi meu forte, kkkk

  • Stefan Horochovec |

    Ola, Renan e Antonio, se precisarem de uma ajuda, postem suas duvidas aqui ou envie por email… Não posso passar codigos prontos, mas posso auxiliar nas dúvidas que vierem surgindo…

    Um forte abraço, obrigado por visitar meu blog!

  • Renan |

    Eu estou desenvolvendo uma solução que acredito nao ser a melhor.
    estou montando em um arquivo o que deve ser impresso usando o servidor e depois usando javascript, activeX e mando o arquivo para a impressora, porque depois de fazer algumas pesquisas verifiquei que muitas pessoas nao falavam muito bem de Applets. E acabei indo por esse caminho.
    Mas estou super interessado nessa sua solução achei muito boa.
    Como funciona esse esquema de assinatura?

  • Stefan Horochovec |

    Ola, muito simples… basta voce usar o jarsigner e assinar seu applet para que tenha acessar periféricos do computador.

    Feito isso, basta enviar via applet os comandos para a impressora que voce pode informar por um parametro ao applet.

  • Renan |

    Stefan,
    Consegui fazer muito obrigado pela as dicas.
    1000000 de vezes melhor que ActiveX.
    Para quem esta na dúvida Applet tambem pode ser uma solução…

  • Tadeu luis |

    Stefan,
    parabéns pelo post.
    Eu estou passando pela mesma situação, gostaria de saber se você poderia passar algumas referencias de como construir este parser XML que você desenvolveu.
    v

  • Stefan Horochovec |

    Ola Tadeu, obrigado por visitar o blog.

    Eu desenvolvi essa rotina na empresa aonde trabalho, portanto não posso passar codigos fontes, porém, caso voce tenha alguma duvida no desenvolvimento, voce pode postar aqui que se eu souber eu te auxilio ;)

    Abraço

  • Mark |

    Cara, desenvolvi o applet, mas notei que ele não consegue criar o PrintStream, procurei em alguns fóruns dizem que é necessário assina-lo, como proceder? se puderes me dar uma mão agradeço muito.

  • Fernando |

    Olá, muito bom e esclarecedor tópico. Estou enfrentando este problema atualmente com Notas Ficais. Qual e-mail que podemos conversar um pouquinho sobre este assunto.

    Grato.

  • Marcelo nascimento |

    Muito bom.
    Fiz um código parecido com o seu, no um applet imprime numa impressora matricial os dados passados por um XML. Minha dúvida é a seguinte, quando eu coloco para imprimir na impressora em um computador linux, ela imprimi com os acentos, mas quando eu coloco em um computador XP, ela imprime caracteres malucos no lugar das letras com acentos.

  • everton |

    Grande Stefan, você pode me explicar como funciona? Eu tentei fazer montar alguns relatorios com php e bibliotecas de pdf, e não obtive muito sucesso.

    parabens pelo blog

  • Andre | Impressoras matriciais |

    Interessante saber que existem pessoas programando em linguagens atuais para este tipo de impressora Stephan. Na verdade ainda vejo a impressora matricial sendo muito utilizada pelas empresas e fábricas. Seria legal se você compartilhasse sua solução para todos Stefan, pois iria ajudar mais gente! Abraços!

So, what do you think ?

  • Current day month ye@r *