Alguém já criou um programa java para imprimir em impressora zebra. Esta impressora utiliza uma linguagem propria chamada zpl. Gostaria de enviar esses comando zpl diretamente a porta LPT1, da impressora zebra.
Agradeço,
Ronaldo Alves
Alguém já criou um programa java para imprimir em impressora zebra. Esta impressora utiliza uma linguagem propria chamada zpl. Gostaria de enviar esses comando zpl diretamente a porta LPT1, da impressora zebra.
Agradeço,
Ronaldo Alves
Boa tarde.
Eu fiz uma aplicação desse tipo para imprimir etiquetas.
A duvida é com a linguagem zpl ou com o comando de impressão?
Cara, se vc poder me ajudar nos dois: impressão e linguagem zpl vou ficar muito agradecido.
Abraço,
Ronaldo Alves
Então cara, se for uma impressão simples não tem muito segredo não. Tem é muito trabalho…srsrsrs
Comece criando uma etiqueta qualquer no Label Matrix. Ele é um software que cria etiquetas para impressoras de diversas marcas e retorna, se vc quiser, o código da etiqueta no formato de linguagem de programação (no caso ZPL). O único problema é que ele é pago… :roll:
Daí é só usar javax.comm ou outra biblioteca java que trabalhe com porta paralela e boa.
De software gerador de etiquetas só conheço o label matrix. A Zebra fornece uns softwares gratuitos para criação de etiquetas. Verifique se eles geram o código da etiqueta. Ai pode mandar o Label Matrix pra bem longe.
brunoacpc tem gente de vc me enviar o código da sua aplicação para imprimir codigo de barras? ou como imprimir utilizando java e enviando para essa impressora. :lol:
Obrigado,
Ronaldo
para abrir a conexão com a porta paralela ou serial:
public void openPort() throws Exception {
CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier("SUA_PORTA");
port = (SerialPort) portId.open("id", timeout);
//valores inteiros para configuracao da porta
port.setSerialPortParams(baudRate,dataBits,stopBits,parity);
serialReader = new BufferedReader(new InputStreamReader(port.getInputStream()));
serialWriter = port.getOutputStream();
}
este exemplo usa a porta serial …
para usar a porta paralela a mudança é minima…
para enviar os dados:
serialWriter.write(data);
Utilizando a biblioteca rxtx
http://www.rxtx.org/
Não esta adiantando. fiz o codigo abaixo ele enviar e imprime em uma impressora HP mas quando coloco a impressora zebra o texto é enviado para o spool (aparece na tela de propriedades de impressão da impressora), sem ocasionar erro algum no java, mas não imprime nada nesta impressora.
Por favor, alguem tem alguma dica?
Obrigado.
Ronaldo Alves
Desculpa esqueci o codigo. ai vai…
import gnu.io.CommPortIdentifier;
import gnu.io.NoSuchPortException;
import gnu.io.ParallelPort;
import gnu.io.PortInUseException;
import java.io.IOException;
import java.io.OutputStream;
import sun.io.CharToByteUnicode;
public class PrinterToZebra
{
private static OutputStream outputStream;;
private static ParallelPort portaParalela;
private static CommPortIdentifier port;
public static final String PORTA_PARALELA = "LPT1";
public void Executa(String printerCodes)
{
System.out.println("Testando...");
try
{
port = CommPortIdentifier.getPortIdentifier(PORTA_PARALELA);
System.out.println("\nPorta aberta: " + port.getName());
portaParalela = (ParallelPort) port.open("PrinterToZebra", 5000);
outputStream = portaParalela.getOutputStream();
outputStream.flush();
char[] charArray = printerCodes.toCharArray();
byte[] byteArray = CharToByteUnicode.getConverter("UTF8").convertAll(charArray);
outputStream.write(byteArray);
System.out.print("Imprimindo...");
outputStream.flush();
System.out.print("Imprimiu.\nLimpando...");
outputStream.close();
System.out.print("Limpou.\nFechando...");
}
catch (NoSuchPortException e)
{
System.out.println("\nPorta de impressão LPT1 não encontrada : "
+ "NoSuchPortException.\nException:\n" + e + "\n");
}
catch (PortInUseException e)
{
System.out.println("\nPorta de impressão LPT1 em uso : "
+ "PortInUseException.\nException:\n" + e + "\n");
}
catch (IOException e)
{
System.out.println("\nPorta de impressão LPT1 falhou na impressão : "
+ "IOException.\nException:\n" + e + "\n");
}
catch (Exception e)
{
System.out.println("\nFalha ao abrir Porta de impressão LPT1. Erro : "
+ e + "\n");
}
finally
{
if (port != null && port.isCurrentlyOwned())
{
portaParalela.close();
}
System.out.print("Fechou.");
}
}
public static void main(String[] args)
{
String texto = "N A50,0,0,1,1,1,N,\"Example 1\" P1";
PrinterToZebra ptz = new PrinterToZebra();
ptz.Executa(texto);
}
}
cara a zebra tem uma linguagem propria e só vai imprimir depois que vc enviar o comando para tal, se não me engano é ^XV
Boa noite um bom caminho para consseguir imprimir em zpl na lpt1 é criando um Generic/Tëxtonly
Pessoal, alguém conseguiu mandar os comandos pra LPT1?
No meu estpu montanto o arquivo correto (pelo dos imprime), mas pelo java não vai !!
public class PrinterToZebra {
private static OutputStream outputStream;
private static ParallelPort portaParalela;
private static CommPortIdentifier port;
public static final String PORTA_PARALELA = "LPT1";
public void executa(StringBuffer printerCodes) {
System.out.println("Testando...");
try {
port = CommPortIdentifier.getPortIdentifier(PORTA_PARALELA);
System.out.println("\nPorta aberta: " + port.getName());
portaParalela = (ParallelPort) port.open("PrinterToZebra", 5000);
outputStream = portaParalela.getOutputStream();
outputStream.write(printerCodes.toString().getBytes());
System.out.print("Imprimindo...");
outputStream.flush();
System.out.print("Imprimiu.\nLimpando...");
outputStream.close();
System.out.print("Limpou.\nFechando...");
} catch (NoSuchPortException e) {
System.out.println("\nPorta de impressão LPT1 não encontrada : " + "NoSuchPortException.\nException:\n" + e + "\n");
} catch (PortInUseException e) {
System.out.println("\nPorta de impressão LPT1 em uso : " + "PortInUseException.\nException:\n" + e + "\n");
} catch (IOException e) {
System.out.println("\nPorta de impressão LPT1 falhou na impressão : " + "IOException.\nException:\n" + e + "\n");
} catch (Exception e) {
System.out.println("\nFalha ao abrir Porta de impressão LPT1. Erro : " + e + "\n");
} finally {
if (port != null && port.isCurrentlyOwned()) {
portaParalela.close();
}
System.out.print("Fechou.");
}
}
public static void main(String[] args) {
StringBuffer texto = new StringBuffer();
texto.append("^Bf290");
texto.append("^BL");
texto.append("H12");
texto.append("D11");
texto.append("1933019021000151164");
texto.append("193301902100280A4");
texto.append("1F00030016500207988512900014");
texto.append("192400401450190NF: 76180");
texto.append("191100201350020239850 - DERSANI 200 ML H - ADVAN");
texto.append("191100301150020HOSP E MAT ASSUNCAO S A");
texto.append("191100301150310Cod.: 153770");
texto.append("191100300950020AV JOAO FIRMINO");
texto.append("191100500650020SAO BERNARDO DO CAMPO SP");
texto.append("191100400330020SV: 2303");
texto.append("19110020035010016/06/09 17:05 Seq: 21");
texto.append("191100400330235 H/07/ 024");
texto.append("191100600010020OS: 948.922");
texto.append("191100200030175(12)");
texto.append("191100600010215F2/ H/08/03/99");
texto.append("E");
PrinterToZebra ptz = new PrinterToZebra();
ptz.executa(texto);
Uma forma mais simplista é escrever um arquivo texto com os comandos e forçar o Java a utilizar um comando do sistema operacional para enviar o arquivo direto no LPT1 (tanto o Windows como Linux tem comandos assim).
No Java existem algumas limitações para trabalhos enviando dados direto na LPT1.
Aqui comigo essa foi a solução mais simplista.
Oi
Já escrevi comandos para uma Zebra Z4M Plus no antigo emprego.
Primeiro: Arrume a documentação do equipamento que você tem.
Para a Z4M Plus eu comecei com o exemplo da página 66 do
documento P1012728-002e.pdf, assim eu sabia qual o resultado deveria
ser impresso.
Usando o Ubuntu eu fiz o teste com o senguinte comando:
sudo echo -n -e “^XA^FO150,100^BY3^B4N,20,A,A^FD12345ABCDE^FS^XZ” > /dev/ttyS0
^XA == Start Format == == 02H (tabela ascii)
^FO == Field Orign
^BY == Bar Code Field Default
^B4 == Code 49 Bar Code
^FD == Field Data
^FS == Field Separator == == 0fH (tabela ascii)
^XZ == End Format == == 03H (tabela ascii)
Para depurar os comandos que eu enviava para a impressora eu usava o hexadump assim:
sudo echo -n -e “^XA^FO150,100^BY3^B4N,20,A,A^FD12345ABCDE^FS^XZ” | hd
Assim eu podia ler em hexa os bytes enviados. Lembro que fazia isso porque
para implementar no sistema eu tive que fazer umas substituições nos
comandos da impressora.
ex: O ^XA eu tinha que passar direto como 02H. Ou foi na Citizen
que eu fazia isso? Não lembro. Faz tempo que eu coloquei essas impressoras
para funcionar.
Espero que ajude.
Desculpem reviver o tópico.
Pessoal eu tenho um arquivo txt com a linguagem ZPL ja pronta, como faço pra enviar para impressora? Ela esta via USB, tentei de algumas formas e nada acontece =/