Códigos ESC/P para Matricial Epson

  /**
 * Impressão de Documento em Matricial
 * @author: Vito Eduardo Patriarcha
 * Monolito Sistemas
 * ASP
 */
 
 import java.io.*;
 import java.lang.StringBuffer;
 public class Imprime {
 public static void main( String[] args) throws IOException {
 
 //Como pode ver, estou abrindo a porta da impressora do windows
 //Para linux use /dev/lp0 ou lp1 ou lp2 conforme a instalacao da impressora
 FileOutputStream outputFile = new FileOutputStream("LPT1");
 PrintWriter out = new PrintWriter(outputFile);
 
 //Defino aqui as variaveis que sao os codigos de controle da impressora
 //Existem varios alem deste.
 //Aki soh criei alguns que eu necessitaria
 final String RESET = "\u001B" + "@";
 final String TAMANHO_DA_PAGINA = "\u001B" + "C" + (char)33;
 
 final String TABELA_CARACTERES = "\u001B" + "t" + (char)0;
 
 final String TABELA_CARACTERES_2 = "\u001B" + "(t" + (char)3 + (char)0 + (char)0 + (char)25 + (char)0;
 final String FORM_FEED = "\f";
 final String NOVA_LINHA = "\n";
 final String ALIMENTA_PAGINA = "\u000C";
 final String TAMANHO_10 = "\u001B" + "!" + (char)0;
 final String TAMANHO_12 = "\u001B" + "M";
 final String TAMANHO_15 = "\u001B" + "g";
 final String TAMANHO_56 = "\u001B" + "!" + (char)56;
 final String ALINHA_DIREITA = "\u001B" + "a" + (char)0;
 final String ALINHA_ESQUERDA = "\u001B" + "a" + (char)1;
 final String ALINHA_CENTRO = "\u001B" + "a" + (char)2;
 final String ALINHA_TOTAL = "\u001B" + "a" + (char)3;
 
 final String COLUNA_A = "\u001B" + "$" + (char)1;
 final String COLUNA_B = "\u001B" + "$" + (char)3;
 final String COLUNA_C = "\u001B" + "$" + (char)5;
 final String COLUNA_D = "\u001B" + "$" + (char)7;
 
 final char vazio = ' ';
 StringBuffer buffer = new StringBuffer();
 
 buffer.setLength(2370);
 
 int novaLinha = 0;
 for (int i = 0; i < 2370; i++)
 buffer.setCharAt(i, vazio);
 
 
 //a funcao
 //INICIO DA LINHA 1
 buffer = alinha(30, "Meu nome é:", buffer);
 buffer = alinha(30, "Vitor Eduardo Patriarcha", buffer);
 buffer = alinha(60, "ROLREL", buffer);
 
 //reseta as configuracoes da impressora e envia os primeiros caracteres de controle
 out.print(RESET);
 out.print(TAMANHO_DA_PAGINA);
 out.print(TABELA_CARACTERES);
 out.print(TABELA_CARACTERES_2);
 
 out.print(TAMANHO_10);
 out.print(buffer.substring(0, 29));
 out.print(TAMANHO_56);
 out.print(buffer.substring(30, 41));
 out.print(TAMANHO_10);
 out.print(buffer.substring(42, 59));
 out.print(TAMANHO_56);
 out.print(buffer.substring(60, 66));
 
 out.print(ALIMENTA_PAGINA);
 //reseta de novo a impressora para as futuras impressoes
 out.print(RESET);
 out.close();
 outputFile.close();
 
 
 }
 
 public static StringBuffer alinha(int inicio, String str, StringBuffer buffer)
 {
 int indexChar = 0;
 int tamanho = str.length();
 char vetorChar[] = str.toCharArray();
 
 for (int i = inicio; i < (inicio + tamanho); i++)
 {
 buffer.setCharAt(i, vetorChar[indexChar]);
 indexChar++;
 }
 
 return buffer;
 }
 
 
 }

Bom dia a todos,

Utilizei as funções acima de nosso amigo “vitorpatriarcha”, porém não foram todos os códigos que a impressora está aceitando, alguém aí já passou por isso ??

Por exemplo:
mando o código TAMANHO_12 ("\u001B" + “M”), funciona direitinho.
funciona também os codigos de ligar e desligar o NEGRITO e ITALICO, porém mando o código TAMANHO_15 ("\u001B" + “g”) a impressora
não compacta as letras para 15cpi.

Uso o SUSE 10 e JDK-1.6 NetBeans 5.5.

Sucesso!!

Ninguém tem idéia do que pode estar errado ???

Pode ser que o seu modelo de impressora não aceite todos os códigos. Pegue o manual da impressora e o estude.

Esses comandos ESC/P são meio que padrão nas matriciais Epson. Talvez uma dica seja verificar a ordem em que você está enviando os comandos, quando eu trabalhei em projetos em que tinha que mandar os comandos pra impressora isso fazia uma certa diferença. Mas isso foi no século passado!

A dica do thingol realmente é boa, essas impressoras sostumam ter um manual de comandos com exemplos. dê uma olhada lá.

É, também mexi com essas coisas no milênio passado :stuck_out_tongue:

Saudacoes Allan,

Tive que fucar a matricial e fazer funcionar… se voce usar o numero nos char(s), fica mais facil para o impressora interpretar, quer dizer, VM.

Os caras que uso em qualquer impressora matricial e que seja fabricante Epson, funfou legal, eis os comandos basicos:

final char ESC = (char) 27; // esc
final char REINICIAR = (char) 64; // reiniciar.
final char EJECT = (char) 12; // eject

Voce tem que ficar esperto, pois tem matricial que quando usa o char EJECT, ele detona tudo as coordenadas (x,y) da impressora, eu evito usar o EJECT, uso o char REINICIAR quando termino um impressao.

Tem outros que acredito que serah util pra voce, segue abaixo:

final char ABRE_NEGRITO = (char) 71; // abre negrito, parecido com a tag do HTML <font></font>, este eh o que abre a tag.
final char FECHA_NEGRITO = (char) 72; // fecha negrito, parecido com a tag do HTML <font></font>, este eh o que fecha a tag.
final char ABRE_CONDENSADO = (char) 15; // condensado
final char FECHA_CONDENSADO = (char) 18; // sai do condensado

Boa sorte pra voce,

Leandro Capuano

A impressora é uma Epson LX-810L, e já vi no manual que ela aceita o comando sim.

Também já tentei, ao inves de mandar o char mandar o número hexa tipo “\u001B\u0067”.

Vou tentar fazer tudo dinovo, e testar a sequencia dos comandos que envio a impressora.

Obrigado a todos.

olá leandrocapuano,

Por favor, voce pode me dizer quais rotinas de impressão você ta usando ?? é a mesma que eu descrevi ???

Obrigado.

Pessoal, mil perdões, o que eu estava querendo era COMPRIMIR os caracteres, utilizei o comando correto e deu certo !!!

No que eu puder ajudar é só avisar ok ??

Muito obrigado

ALLAN

Saudacoes Allan,

Em primeiro lugar, peco desculpas pela demora em lhe responder, pois estava ausente na net por motivo de trabalho. Em relacao a sua duvida, unica diferenca da minha para a sua, eh que eu uso char para enviar comando para a impressora matricial e voce manda String para a impressora e o resto estah igual.

Meus parabens que voce conseguiu fazer o que queria. Boa sorte no proximo desafio.

Abracos,

Leandro Capuano