Java e impressora matricial  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
Valder Olmo Corrêa
JavaGuru
[Avatar]

Membro desde: 29/12/2007 17:22:53
Mensagens: 213
Localização: São Paulo
Offline

Olá, amigos do GUJ !
Estou precisando desenvolver uma pequena aplicação para imprimir notas fiscais pela impressora matricial, porém não faço a mínima idéia de como fazer isso.
Já pesquisei aqui no GUJ e no Google, mas o que encontro não condiz com uma pessoa que esteja aprendendo a desenvolver esse tipo de aplicação, ou seja, começando do zero. Aqui no GUJ até encontrei um código pronto, mas o problema é entender como tal código funciona, o que faz cada linha do programa.
Também andei dando uma olhada em alguns tutoriais da SUN, mas são confusos e cada página que visito há uma infinidade de links adicionais. Com isso perco-me um pouco.
Alguém sabe onde posso encontrar um bom tutorial para conexão com a impressora matricial bem como um tutorial de como implementar esse programa de impressão de notas fiscais pela impressora matricial ? Pode ser apostila, link da web, até livro (nesse caso até prefiro, pois nos livros as coisas sempre vêm bem melhor explicadas, posso comprá-lo, se for o caso).

Desde já agradeço a ajuda.


[WWW]
raci0nal
JavaChild
[Avatar]

Membro desde: 09/01/2007 12:53:24
Mensagens: 147
Offline

Amigo, infelizmente não vou poder te ajudar com links... senão eu só iria pesquisar no Google, coisa que você já deve ter feito. rs
Mas posso lhe dizer que imprimir em uma impressora matricial é muito simples.
Basta você tratar como se estivesse escrevendo um arquivo de texto. O detalhe é que ao invés de especificar um caminho do sistema de arquivos, você especifica a porta da impressora (como a LPT1).
O próprio Java possui uma classe para isso, a PrintStream.

De maneira bem simples, isso imprimiria em uma impressora conectada à porta LPT1:

Se quiser tentar e precisar de alguma ajuda, escreva.

Abraços,
Marcos Antonio Campos Jordão''
[MSN]
Valder Olmo Corrêa
JavaGuru
[Avatar]

Membro desde: 29/12/2007 17:22:53
Mensagens: 213
Localização: São Paulo
Offline

Opa, Marco, que beleza !
Obrigadão pelo código ! Parece bem simples mesmo !
Mas o que vejo aí é que não há como posicionar o cursor da impressora em uma determinada coluna da linha, coisa necessária para se imprimir notas fiscais.
Vejo que há como quebrar a linha, mas como eu posiciono o cursor numa determinada posição da linha (coluna) ?
E outra coisa, andei lendo que vaira muito de impressora para impressora, por exemplo, a forma de impressão, formatação (tamanho do fonte, cor do fonte, etc...), variam de uma Epson para uma HP, por exemplo. Gostaria de saber como posso fazer isso. Acredito que numa nota fiscal há campos em que o tamanho do fonte seja diferente do tamanho do fonte de outro campo. Gostaria de saber isso também.
Se puder continuar ajudando, agradeço muito !
Quanto a testar o código, sim, irei testá-lo, mas antes preciso arrumar uma impressora matricial, mas isso eu dou um jeito.
Obrigado desde já.


[WWW]
raci0nal
JavaChild
[Avatar]

Membro desde: 09/01/2007 12:53:24
Mensagens: 147
Offline

Para "posicionar" o carro de impressão em uma coluna o método que eu uso é inserir espaços antes dos textos.
Precisei desses recursos justamente para impressão de Notas Fiscais (que aliás graças à Deus está sendo substituído pela NF-e).
Realmente como você disse há uma variação entre impressoras matriciais. O que mais percebi foi variação na "altura da linha". Mas não é muita não.
Sua aplicação necessita ser utilizada por impressoras diferentes? Mas sempre matricial né?

Quando estava desenvolvendo essa impressão de Notas Fiscais, criei uma classe "genérica" para auxiliar a impressão.
Se quiser, posso lhe enviar o Código.

Mas uma coisa você não conseguirá escapar: testar muito até encontrar as posições corretas dos campos, de acordo com a impressora e principalmente de acordo com o formulário. É bem chatinho! rs
[MSN]
Valder Olmo Corrêa
JavaGuru
[Avatar]

Membro desde: 29/12/2007 17:22:53
Mensagens: 213
Localização: São Paulo
Offline

Ops, Legal, Marco, também tive essa idéia de inserir espaços em branco na linha até o carro chegar no lugar certo
E sei que é meio chato esse teste, já fiz isso quando estava aprendendo Clipper. tem que mandar a impressora imprimir x no formulário inteiro e ir contanto os espaços. Mjuito chato mesmo.
Se puder me enviar o código, agradeço muito mesmo ! Não tenho muita pressa para fazer isso, mas o quanto antes melhor.
Abraços !


[WWW]
raci0nal
JavaChild
[Avatar]

Membro desde: 09/01/2007 12:53:24
Mensagens: 147
Offline

Valder,

Segue duas classes.
Uma funciona como "auxiliar genérica" e a outra é uma implementação de impressão em uma LX300.
Acho que vai te ajudar.
Qualquer dúvida, escreva.
 Nome do arquivo EmissorNotaFiscal.java [Disk] Download
 Descrição EmissorNotaFiscal.java
 Tamanho 2 Kbytes
 Baixado:  251 vez(es)

 Nome do arquivo EmissorLX300.java [Disk] Download
 Descrição EmissorLX300.java
 Tamanho 4 Kbytes
 Baixado:  291 vez(es)

[MSN]
Valder Olmo Corrêa
JavaGuru
[Avatar]

Membro desde: 29/12/2007 17:22:53
Mensagens: 213
Localização: São Paulo
Offline

marco, mito obrigado pela tremenda ajuda que está me prestando, sou muito grato.
Arrumarei a impressora e começarei a fazer os testes.
Precisando de alguma coisa, envie mp ou poste aqui mesmo.
Valeu aí, rapaz !


[WWW]
marcellhkr
What is classpath?

Membro desde: 05/11/2009 19:52:37
Mensagens: 9
Offline

Marco muito obrigado pela ajuda ai.
Seus códigos quebraram um galhão
Vlw

This message was edited 2 times. Last update was at 16/11/2009 12:27:38

marcellhkr
What is classpath?

Membro desde: 05/11/2009 19:52:37
Mensagens: 9
Offline

Marco na sua implementação vc nem usou o código esc-p da epson né?
Vc tem como explicar o código que vc fez do alinha esquedar, centro ,direita de como funciona.
Vc se basea em 80 colunas e vai imprimindo.
Se vc tiver como passar uma imagem da sua nota fical só pra eu ter uma ideia de como fica me ajudaria um pouco.
Obrigado
raci0nal
JavaChild
[Avatar]

Membro desde: 09/01/2007 12:53:24
Mensagens: 147
Offline

Usei o código Esc-P para imprimir em negrito (método "adicionarNegrito()") e para dar um espaçamento na margem superior adequando ao formulário que eu deveria seguir (linha 2 do método "emitir()").

Os métodos de alinhamento são bem simples.
Fiz um método auxiliar "getEspaco(int qtde)" que retorna a quantidade informada em espaços em branco.
No "alinharDireita()" e "alinharEsquerda()" eu pego o texto informado (parâmetro "String texto") e completo com a quantidade de espaços necessária para que fique do tamanho informado (parametro "int tamanho").
Segue com comentários:

O "alinharCentro()" só é diferente quanto ao cálculo para achar o centro. Ele calcula a diferença (espaços necessários para completar o "tamanho" informado) e divide essa diferença por 2, colocando metade dos espaços à esquerda e metade à direita.
Simples assim.

Agora a quantidade de quebra de linhas, quantidade de espaços, tudo isso você tem que ir testando e fazendo um "mapeamento" de como deve ser, de acordo com o formulário que tem que preencher. Pode por nisso vários formulários de teste.

Infelizmente não tenho nenhum formulário digitalizado para enviar. Até porque a NF-e substituiu o que eu tinha implementado.
Fico devendo.

Abraços,
Marcos Antonio Campos Jordão''
[MSN]
mcncicco
Entusiasta Java

Membro desde: 03/07/2008 10:53:45
Mensagens: 16
Offline

Olá, muito bom o seu código marcus.

Aqui está imprimindo, sendo que sem acentuação, como eu faço para conseguir imprimir com os acentos???

Obrigado desde já.
marcellhkr
What is classpath?

Membro desde: 05/11/2009 19:52:37
Mensagens: 9
Offline

Vc tem que dizer pra impressora qual tabela de char vc quer usar.
Eu estou usando um impressora da epson e passa isso através dos comando ESC/P.
Muitas das coisas sobre este código peguei desta pagina
http://www.drayah.net/
Nesta página vc acha um biblioteca em java pronto com comando ESC/P
Existe também os manuais sobre os comandos esc/p
support.epson.ru/products/manuals/000350/part1.pdf
support.epson.ru/products/manuals/000351/part2.pdf
support.epson.ru/products/manuals/000352/part3.pdf
Espero que estas informações ajude vc.
Abraços
mcncicco
Entusiasta Java

Membro desde: 03/07/2008 10:53:45
Mensagens: 16
Offline

Olá Marcel,

Tentei entender como criar a classe ESCPrinter, mas não realidade não consegui entender nada, vc não teria como me mostrar algo prático???

Obrigado desde já pela atenção!!

Marcelo
marcellhkr
What is classpath?

Membro desde: 05/11/2009 19:52:37
Mensagens: 9
Offline


Este código foi adaptado daquele biblioteca que eu passei e foi adaptado e usado como o marco utiliza no código dele
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team