Impresão formulario continuo - Epson LX 300 II

4 respostas
RogerioK

Boa noite, estou com uma dúvida quanto a impresão, ja consigo fazer ela imprimir a nota toda, mas quando termina, uso o comando ESC

CR = 13; //carriage return
FF = 12; //form feed

porem ele puxa como se fosse uma folha a4 inutilizando uma parte do formulario continuo…
quero saber como fazer para ela parar certinho quando termina o formulario, ou alinhar toda vez que for imprimir novamente, porque se ela imprimir somente uma e parar, nao sei se vai ficar bom o espaço para destacar…

Obrigado.

4 Respostas

mauricioadl

basta vc setar as configuraçoes que vc quiser, incluse a de tamanho de pagina, nas constantes que ela imprime na boa.

[]´s

package util.impressao;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;

import javax.swing.JOptionPane;

/**
 * Classe que constroi um componente para impressao de impressora matricial
 * 
 * @author Mauricio Lima
 * 
 *         Data de Criacao: 13/05/2009
 * 
 */

public class ImpressoraBean {

	// Codigos de controle da impressora
	public static final String CONDENSADO = "\u001B\u000F";
	public static final String NORMAL = "\u0012";
	public static final String ALINHAMENTO_VERTICAL_18 = "\u001B\u0030";
	public static final String NEW_LINE = "\n";
	public static final String CARRIAGE_RETURN = "\r";
	public static final String RESET = "\u001B" + "@";
	public static final String TAMANHO_DA_PAGINA = "\u001B" + "C" + (char) 33;
	public static final String TABELA_CARACTERES = "\u001B" + "t" + (char) 0;
	public static final String TABELA_CARACTERES_2 = "\u001B" + "(t" + (char) 3
			+ (char) 0 + (char) 0 + (char) 25 + (char) 0;
	public static final String FORM_FEED = "\f";
	public static final String TAMANHO_10 = "\u001B" + "!" + (char) 0;
	public static final String TAMANHO_12 = "\u001B" + "M";
	public static final String TAMANHO_15 = "\u001B" + "g";
	public static final String TAMANHO_56 = "\u001B" + "!" + (char) 56;
	public static final String ALINHA_DIREITA = "\u001B" + "a" + (char) 0;
	public static final String ALINHA_ESQUERDA = "\u001B" + "a" + (char) 1;
	public static final String ALINHA_CENTRO = "\u001B" + "a" + (char) 2;
	public static final String ALINHA_TOTAL = "\u001B" + "a" + (char) 3;
	public static final String COLUNA_A = "\u001B" + "$" + (char) 1;
	public static final String COLUNA_B = "\u001B" + "$" + (char) 3;
	public static final String COLUNA_C = "\u001B" + "$" + (char) 5;
	public static final String COLUNA_D = "\u001B" + "$" + (char) 7;

	private StringBuffer buffer = null;
	private String impressora;

	public ImpressoraBean() {
		// use "/dev/lp0" no LINUX
		this.impressora = "LPT1:";
		buffer = new StringBuffer();
	}

	public ImpressoraBean(String impressora) {
		this.impressora = impressora;
		buffer = new StringBuffer();
	}

	public void insertLine() {
		String x = "-";
		for (int i = 0; i < 95; i++) {
			x += "-";
		}
		println(x);
	}

	/**
	 * Escreve uma String e nao pula a linha
	 * 
	 * @param s
	 */
	public void print(String s) {
		buffer.append(s);
	}

	/**
	 * Escreve uma String e pula uma linha
	 * 
	 * @param s
	 */
	public void println(String s) {
		buffer.append(s);
		println();
	}

	/**
	 * Pula uma linha e posiciona no inicio
	 */
	public void println() {
		buffer.append(NEW_LINE + CARRIAGE_RETURN);
	}

	/**
	 * troca a folha da impressora
	 */
	public void printff() {
		buffer.append(FORM_FEED);
	}

	/**
	 * Manda para impressora
	 * 
	 * @return retorna um booleano confirmando a impressao
	 */
	public boolean flush() {

		FileOutputStream outputFile;
		try {
			outputFile = new FileOutputStream(impressora);
			PrintWriter out = new PrintWriter(outputFile);
			out.print(buffer.toString());
			out.close();
			outputFile.close();
			return true;
		} catch (Exception e) {
			JOptionPane.showMessageDialog(null,
					"Impressora ou arquivo nao encontrado!");
			System.out.println(e.getMessage());
			return false;

		}

	}

	@Override
	public String toString() {
		return buffer.toString();
	}
}
RogerioK
mauricioadl:
basta vc setar as configuraçoes que vc quiser, incluse a de tamanho de pagina, nas constantes que ela imprime na boa.

[]´s

package util.impressao;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;

import javax.swing.JOptionPane;

/**
 * Classe que constroi um componente para impressao de impressora matricial
 * 
 * @author Mauricio Lima
 * 
 *         Data de Criacao: 13/05/2009
 * 
 */

public class ImpressoraBean {

	// Codigos de controle da impressora
	public static final String CONDENSADO = "\u001B\u000F";
	public static final String NORMAL = "\u0012";
	public static final String ALINHAMENTO_VERTICAL_18 = "\u001B\u0030";
	public static final String NEW_LINE = "\n";
	public static final String CARRIAGE_RETURN = "\r";
	public static final String RESET = "\u001B" + "@";
	public static final String TAMANHO_DA_PAGINA = "\u001B" + "C" + (char) 33;
	public static final String TABELA_CARACTERES = "\u001B" + "t" + (char) 0;
	public static final String TABELA_CARACTERES_2 = "\u001B" + "(t" + (char) 3
			+ (char) 0 + (char) 0 + (char) 25 + (char) 0;
	public static final String FORM_FEED = "\f";
	public static final String TAMANHO_10 = "\u001B" + "!" + (char) 0;
	public static final String TAMANHO_12 = "\u001B" + "M";
	public static final String TAMANHO_15 = "\u001B" + "g";
	public static final String TAMANHO_56 = "\u001B" + "!" + (char) 56;
	public static final String ALINHA_DIREITA = "\u001B" + "a" + (char) 0;
	public static final String ALINHA_ESQUERDA = "\u001B" + "a" + (char) 1;
	public static final String ALINHA_CENTRO = "\u001B" + "a" + (char) 2;
	public static final String ALINHA_TOTAL = "\u001B" + "a" + (char) 3;
	public static final String COLUNA_A = "\u001B" + "$" + (char) 1;
	public static final String COLUNA_B = "\u001B" + "$" + (char) 3;
	public static final String COLUNA_C = "\u001B" + "$" + (char) 5;
	public static final String COLUNA_D = "\u001B" + "$" + (char) 7;

	private StringBuffer buffer = null;
	private String impressora;

	public ImpressoraBean() {
		// use "/dev/lp0" no LINUX
		this.impressora = "LPT1:";
		buffer = new StringBuffer();
	}

	public ImpressoraBean(String impressora) {
		this.impressora = impressora;
		buffer = new StringBuffer();
	}

	public void insertLine() {
		String x = "-";
		for (int i = 0; i < 95; i++) {
			x += "-";
		}
		println(x);
	}

	/**
	 * Escreve uma String e nao pula a linha
	 * 
	 * @param s
	 */
	public void print(String s) {
		buffer.append(s);
	}

	/**
	 * Escreve uma String e pula uma linha
	 * 
	 * @param s
	 */
	public void println(String s) {
		buffer.append(s);
		println();
	}

	/**
	 * Pula uma linha e posiciona no inicio
	 */
	public void println() {
		buffer.append(NEW_LINE + CARRIAGE_RETURN);
	}

	/**
	 * troca a folha da impressora
	 */
	public void printff() {
		buffer.append(FORM_FEED);
	}

	/**
	 * Manda para impressora
	 * 
	 * @return retorna um booleano confirmando a impressao
	 */
	public boolean flush() {

		FileOutputStream outputFile;
		try {
			outputFile = new FileOutputStream(impressora);
			PrintWriter out = new PrintWriter(outputFile);
			out.print(buffer.toString());
			out.close();
			outputFile.close();
			return true;
		} catch (Exception e) {
			JOptionPane.showMessageDialog(null,
					"Impressora ou arquivo nao encontrado!");
			System.out.println(e.getMessage());
			return false;

		}

	}

	@Override
	public String toString() {
		return buffer.toString();
	}
}

Olá Mauricio, obrigado pela sua resposta, vc sabe qual o tamanho da A5 e como seto ela na impressora? obrigado.

mauricioadl

nao sei o tamanho do A5 nao, mas fica facil de vc fazer uns teste, basta vc setar a quantidade de linhas que voce quer que ela imprima e pare, eu usava isso pra imprimir uns pdvs em lx 300, veja a classe que fazia isso, acho q ela explica melhor como fazer:

package util.impressao;

import java.text.DecimalFormat;
import java.util.List;

import model.FormaPagamentoPedido;
import model.Pedido;
import model.PedidoProduto;
import util.Data;

public class ImpressaoPedido {
	private ImpressoraBean imp;
	private Configuracoes config;
	private List<PedidoProduto> lista;
	private DecimalFormat df;
	private boolean volta = false;

	public ImpressaoPedido(Pedido pedido, List<FormaPagamentoPedido> fpp) {
		config = new Configuracoes();
		imp = new ImpressoraBean(config.getImpressora());
		imp.print(imp.TAMANHO_DA_PAGINA);
		imp.print(imp.TAMANHO_12);
		lista = pedido.getProdutos();
		df = new DecimalFormat("#,###.00");
		do {			
			// INICIO DA LINHA 1
			imp.println(config.getDadosEmpresa().getNome());
			// FIM DA LINHA 1, INICIO DA LINHA 2
			imp.println(config.getDadosEmpresa().getEndereco() + "-"
					+ config.getDadosEmpresa().getFone());			
			// FIM DA LINHA 2, INICIO DA LINHA 3
			imp.insertLine();
			// FIM DA LINHA 3, INICIO DA LINHA 4
			imp.print("Vendedor: " + pedido.getFuncionario().getNome());
			imp.print("\t\t\t\tData Emissao:"
					+ new Data().dataParaString(pedido.getData()));
			imp.println("\t\tPDV: " + pedido.getId());
			// FIM DA LINHA 4, INICIO DA LINHA 5
			imp.print(pedido.getCliente().toString());
			imp.println("\t\t" + pedido.getCliente().getTel());
			// FIM DA LINHA 5, INICIO DA LINHA 6
			imp.print(pedido.getCliente().getLogradouro());
			imp.println(" - " + pedido.getCliente().getBairro());
			// FIM DA LINHA 6, INICIO DA LINHA 7
			imp.insertLine();
			// FIM DA LINHA 7, INICIO DA LINHA 8
			imp.println(cabecalhoProduto());
			// FIM DA LINHA 8, INICIO DA LINHA 9

			int size = lista.size();
			for (int i = 0; i < 14; i++) {
				if (i < size) {
					imp.print(linhaProduto(lista.get(i)));
				}
				imp.println();
			}

			// FIM DA LINHA 22, INICIO DA LINHA 23
			imp.println();
			// FIM DA LINHA 23, INICIO DA LINHA 24
			imp.insertLine();
			// FIM DA LINHA 24, INICIO DA LINHA 25
			imp.println("Qtd Produtos..: " + pedido.getProdutos().size() + 			
			"   Acrecimo..: R$ "
					+ df.format(pedido.getValorAcrescimo()) + 
			"\tDesconto..: R$ "
					+ df.format(pedido.getValorDesconto()) +
			"\tValor Total..: R$ "
					+ df.format(pedido.getValorTotal()));
			// FIM DA LINHA 25, INICIO DA LINHA 26
			imp.insertLine();
			// FIM DA LINHA 26, INICIO DA LINHA 27
			imp.print(fpp.get(0).getFormaPagamento().getTipo() + ": ");				
			imp.println(df.format(fpp.get(0).getValor()));			
			// FIM DA LINHA 27, INICIO DA LINHA 28
			int z;
			for(z = 1; z < fpp.size() && z <= 5; z++){
				if(!fpp.get(z).equals(fpp.get(z - 1))){
					imp.print(fpp.get(z).getFormaPagamento().getTipo() + ": ");				
					imp.println(df.format(fpp.get(z).getValor()));
				}
			}
			// FIM DA LINHA 28, INICIO DA LINHA 29
			for(int w = z; w <= 5; w++ ){
				imp.println();
			}
			// FIM DA LINHA 29, INICIO DA LINHA 30
			
			// FIM DA LINHA 30, INICIO DA LINHA 31

			// FIM DA LINHA 31, INICIO DA LINHA 32
			imp.print("[ML - Solucoes em Software]");
			imp.println("\t\t\t\t\t" + new util.Data().getDataPorExtenso());
			imp.println();
			// FIM DA LINHA 33			
			
			if (lista.size() > 14) {
				volta = true;
				lista = lista.subList(14, lista.size());				
			}else{
				volta = false;
			}			
		} while (volta);
		imp.flush(); // manda tudo para a impressora
		System.out.println(imp); // imprime no console

	}

	private String linhaProduto(PedidoProduto pp) {
		StringBuffer linha = new StringBuffer();
		for (int i = 0; i < 96; i++) {
			linha.append(" ");
		}
		linha.insert(0, pp.getProduto().toString());
		linha.insert(50, pp.getProduto().getGarantia());
		linha.insert(62, pp.getQuantidade() + "");
		linha.insert(70, df.format(pp.getValor()));
		linha.insert(85, df.format((pp.getValor() * pp.getQuantidade())));
		return linha.substring(0, 96);
	}

	private String cabecalhoProduto() {
		StringBuffer linha = new StringBuffer();
		for (int i = 0; i < 96; i++) {
			linha.append(" ");
		}
		linha.insert(0, "Produto");
		linha.insert(50, "Garantia");
		linha.insert(62, "Qtd.");
		linha.insert(70, "Valor Uni.");
		linha.insert(85, "Valor Total");
		return linha.toString().substring(0, 96);
	}

}
leoramos

A5 é metade da A4, mestre!

Criado 6 de julho de 2011
Ultima resposta 7 de jul. de 2011
Respostas 4
Participantes 3