Impressora zebra (zpl) e Java  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
bhzdado
Entusiasta Java
[Avatar]

Membro desde: 14/07/2005 17:37:29
Mensagens: 18
Offline

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

"Tristeza não tem fim, felicidade sim"
[Email]
brunoacpc
JavaBaby
[Avatar]

Membro desde: 24/03/2005 11:33:27
Mensagens: 85
Localização: Sorocaba SP
Offline

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?

Bruno Abdelnur
[Email] [Yahoo!] [MSN]
bhzdado
Entusiasta Java
[Avatar]

Membro desde: 14/07/2005 17:37:29
Mensagens: 18
Offline

Cara, se vc poder me ajudar nos dois: impressão e linguagem zpl vou ficar muito agradecido.

Abraço,

Ronaldo Alves

"Tristeza não tem fim, felicidade sim"
[Email]
Rodrigo Vieira Pinto
JavaEvangelist
[Avatar]

Membro desde: 15/07/2004 11:05:05
Mensagens: 354
Localização: São Paulo
Offline

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....

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.

"Ser o segundo é ser o primeiro dos perdedores" - Ayrton Senna

"Eu vou dá 10 pau!!" - Aracy de Almeida

Nova dupla sertaneja: Waterfall e Procedural. Pra começar, é sertanejo (ARGH!)

"Bem, dizia eu que a aritmética..." - Prof. Girafales

bhzdado
Entusiasta Java
[Avatar]

Membro desde: 14/07/2005 17:37:29
Mensagens: 18
Offline

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.
Obrigado,

Ronaldo

"Tristeza não tem fim, felicidade sim"
[Email]
mchiareli
JavaEvangelist
[Avatar]

Membro desde: 04/04/2006 15:14:50
Mensagens: 397
Offline

para abrir a conexão com a porta paralela ou serial:



este exemplo usa a porta serial ....
para usar a porta paralela a mudança é minima....


para enviar os dados:


Utilizando a biblioteca rxtx
http://www.rxtx.org/

This message was edited 1 time. Last update was at 03/09/2007 17:35:19


codifica.wordpress.com
[WWW] [MSN]
bhzdado
Entusiasta Java
[Avatar]

Membro desde: 14/07/2005 17:37:29
Mensagens: 18
Offline

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

"Tristeza não tem fim, felicidade sim"
[Email]
bhzdado
Entusiasta Java
[Avatar]

Membro desde: 14/07/2005 17:37:29
Mensagens: 18
Offline

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);

}
}

"Tristeza não tem fim, felicidade sim"
[Email]
mchiareli
JavaEvangelist
[Avatar]

Membro desde: 04/04/2006 15:14:50
Mensagens: 397
Offline

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

codifica.wordpress.com
[WWW] [MSN]
russão
Smalltalk

Membro desde: 31/03/2008 20:55:52
Mensagens: 1
Offline

Boa noite um bom caminho para consseguir imprimir em zpl na lpt1 é criando um Generic/Tëxtonly
orogerio
JavaBaby
[Avatar]

Membro desde: 08/03/2008 14:38:14
Mensagens: 94
Offline

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 !!


Certificado Java - OCJP 6.
ODAtech - Orientação no Desenvolvimento de Software
[WWW]
petter
Virtual Machine Man

Membro desde: 28/04/2006 17:11:34
Mensagens: 662
Offline

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.

-----------------------------------------
Java is the future
-----------------------------------------
[WWW]
GradeBook
JavaChild

Membro desde: 08/07/2009 15:27:10
Mensagens: 142
Offline

Oi

Já escrevi comandos para uma Zebra Z4M Plus no antigo emprego.

Primeiro: Arrume a documentação do equipamento que você tem.
http://www.zebra.com/id/zebra/na/en/index/resource_library/manuals.html

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 == <STX> == 02H (tabela ascii)
^FO == Field Orign
^BY == Bar Code Field Default
^B4 == Code 49 Bar Code
^FD == Field Data
^FS == Field Separator == <SI> == 0fH (tabela ascii)
^XZ == End Format == <ETX> == 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.
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team