Olá, pessoal! Sou novo no fórum, não encontrei uma forma de resolver meu problema (pelo menos facilmente) e resolvi postar.
Eu tenho aqui um sistema de geração de etiquetas. Ele gera a etiqueta em um canvas (eu desenho cada componente, pois o cliente desenha o campo ele mesmo).
Preciso imprimir em impressoras laser, inkjet e térmica. Para laser e inkjet já está pronto, o problema é com a impressora térmica.
Pelo que li em alguns lugares, vi que algumas impressoras conseguem imprimir se eu mandar um bitmap para elas ou um metafile.
Aqui tenho o primeiro problema: gerar um bitmap correto e gerar um metafile.
Eu gero uma imagem do canvas exatamente como está na tela. Mas é tão exatamente, que quando eu mando pra impressora, ele fica até com resolução melhor. Mas quando eu gero a imagem, a resolução é pequena (os textos estão pequenos e pixalizados, incompreensíveis). Para imprimir direto na impressora (inkjet ou laser) funciona bem, mas como preciso gerar a imagem para mandar para a impressora térmica, isto se transformou num problema. Se pudesse deixar os textos maiores e mais detalhados, seria melhor. Tentei desenhar com fontes maiores, em espaço maior, mas nada =/.
Agora, como gerar um metafile a partir do canvas para mim é ainda um mistério. Mas como não é prioridade, deixei meio de lado para agora.
Fazer a comunicação com a impressora térmica vira outro problema. Encontrei em alguns lugares uma forma de imprimir uma imagem bitmap numa impressora mandando comandos para ela via porta paralela ou serial (não lembro exatamente agora). Mas minha imagem nem é gerada corretamente, então adiei o teste desse código.
Este é o código para impressão numa impressora inkjet ou impressora laser
PrinterJob pjob = PrinterJob.getPrinterJob();
pjob.setPrintable(etiqueta);
try
{
pjob.print();
}
catch(PrinterException pex)
{
pex.printStackTrace();
}
Simples. Tudo bem que tem muito mais configurações de página e etc. Mas ai é onde ele envia tudo formatado para a impressora.
“etiqueta” é uma instância de uma classe que herda de Canvas.
Será que não tem uma forma meio “simples” (que pelo menos fique com código de forma limpa como essa) assim de imprimir numa impressora térmica?
Se não houver, pelo menos se eu descobrir como mandar uma impressora imprimir uma imagem (texto eu consigo), eu disponibilizaria este conjunto de classes para impressão depois.
Desculpem o post grande.
Agradeço a atenção desde já!