quinta-feira, 31 de janeiro de 2008

Java - Como imprimir na Epson LX-300 via LPT1 - Parte 2

Olá, pessoal. Mais um exemplo de uso dos códigos ESC/P em um programa Java para impressão na Epson LX-300. Trata-se de um método que pode ser usado para configurar o estado inicial da imrpessora. Vejamos.

private void setImpressora() {
/* Espaçamento default de linha = 1/8in = 0,3175cm */
ps.print("\u001B\u0030");
/* Quantidade de linhas por página = 48 */
ps.print("\u001B\u0043" + (char)48);
/* Retorno do carro */
ps.print("\u001B" + "\r");
if (numPagina == 1) {
numLinha = 3;//Compensa a numeração das linhas na primeira página
/* Linha 3 + impressão de 11 linhas em branco = 4,445cm */
imprimeLinhasEmBranco(11);
} else {
numLinha = 0;
/* Impressão de 14 linhas em branco = 4,445cm */
imprimeLinhasEmBranco(14);
}
/* Retorno do carro */
ps.print("\u001B" + "\r");
/* Tamanho da fonte = 12cpi */
ps.print("\u001B\u004D");
/* Modo enfatizado - negrito */
ps.print("\u001B" + "E");
/* Define a margem esquerda n=coluna da margem esquerda */
ps.print("\u001B\u006C" + (char)2);
}

Para saber de onde apareceu o 'ps', dê uma olhada no post anterior. Por hoje, é isso.

quarta-feira, 30 de janeiro de 2008

Java - Como imprimir na Epson LX-300 via LPT1 - Parte 1

Introdução (e desabafo)
OK. Pessoal. Espero que isso valha alguma coisa porque me deu muita dor de cabeça. Pode parecer algo idiota para alguns, mas o problema é que varri essa tal de Internet, em inglês, português e alemão e não houve alma que conseguisse me dar uma resposta satisfatória. Então, após muitas horas de pesquisa e de juntar pedaços daqui e dali, eis o resultado.

Veja o código abaixo
//Inicio do código
import java.io.FileOutputStream;
import java.io.PrintStream;

public class Impressao {
public static void main(String[] args) {
FileOutputStream fos = null;
PrintStream ps = null;
try{
fos = new FileOutputStream("LPT1:");
} catch (Exception ex) {
}
try {
ps = new PrintStream(fos);
} catch (Exception exception) {
}
ps.print("Coloque aqui o que você quer imprimir");

}
}
//Fim do código

Caso a sua porta não seja a LPT1, basta passar outra como argumento.

Lista de Alguns Códigos ESC/P e Seus Usos
A idéia é enviar comandos do software da impressora (ESC/P) diretamente para a porta em uso, no nosso exemplo, a LPT1. Abaixo segue uma lista de alguns códigos bastante úteis.

Exemplo: ps.print("\u001B\u0043" + (char)36);
Resultado: Especifica o tamanho da página em linhas. Neste caso, a página possui 36 linhas. É possível especificar de 1 a 127 linhas por página.

Exemplo: ps.print("\u001B\u0032");
Resultado: Espaçamento de linha default: 1/6 de polegada. Existem outras opções de espaçamento de linhas.

Exemplo: ps.print("\u001B" + "\r");
Resultado: Retorna o carro da impressora.

Exemplo: ps.print("\u001B\u004A" + (char)200);
Resultado: Avanço vertical. Move a posição verticalmente n/216 polegadas. No exemplo acima, isso equivale a 200/216 = 0,9259, ou seja, 2,35cm.

Exemplo: ps.print("\u001B" + "E");
Resultado: Modo enfatizado (negrito);

Exemplo: ps.print("\u001B" + "F");
Resultado: Desativa o modo enfatizado.

Há uma arquivo com todos os códigos disponíveis em:
http://www.epson.co.uk/support/manuals/pdf/ESCP/Part_1.pdf
http://www.epson.co.uk/support/manuals/pdf/ESCP/Part_2.pdf

Com usar esta referência?
Nos links passados acima, você encontrará a referência dos códigos ESC/P para a impressora Epson LX-300, mas como usar este material. Veja um exemplo:

O que você encontrará na referência é algo assim:

ESC J Advance print position vertically
Format
ASCII ESC J n
Hex 1B 4A n
Decimal 27 74 n

Como usar?
- O código ASCII seria: ESC J n
- O código Hex seria: 1B 4A n
- O código decimal seria: 27 74 n

Eu usei o código Hexa. Veja o exemplo abaixo:

ps.print("\u001B\u004A" + (char)120);

Com a linha acima, haverá um avanço vertical do carro de 120/216 polegadas. No código acima:
ps = instância de PrintStream
print = método do objeto
\u001B = hexa para ESC
\u004A = hexa para J
(char)120 = o valor de 'n'.

Faça alguns testes. Espero que apreciem.