Site imprimindo etiquetas impressora Zebra

26 respostas
S

Olá amigos preciso da ajuda de vcs, possuo a seguinte necessidade, imprimir etiquetas em uma impressora Zebra que vai estar instalada no cliente.

A forma de imprimir já testei utilizando um exemplo do site da DevMedia, e tudo deu certo mas este teste foi feito com JavaSE local, apontando para a porta da impressora.

Minha duvida é como imprimir as etiquetas em uma impressora instalada no cliente?

Obrigado!

26 Respostas

W

Não faço a mínima ideia de como funciona a implementação de segurança nos applets, mas, que me lembre, você pode colocar os applets como uma alternativa (GAMBIARRA?). :?

D

ta mais o acesso vai ser via web (html), ou desktop e o cliente terá acesso remoto através do Terminal Server ?

S

Aplicação Web, Jsp em um servidor Jboss, pode ser utilizado JSF também.

B

Uma vez fiz um programa pra imprimir via Web, o site era em PHP, usei java Applet pra isso. O site enviava o Applet já autenticado para o cliente. O Applet pedia pro cliente selecionar a impressora térmica, montava o código EPL com os comandos de impressão, depois mandava o código pra impressora. Usei a impressora Zebra TLP2844.

S

É isso que eu preciso, tenho os codigos EPL mas não sei como fazer, tem como dar uma explicada mais detalha, se possivel passar codigos?
A impressora estava instalada via usb ou porta paralela?
Valeu!

P

Uma dica: Se a impressora estiver conectada via USB é melhor utilizar um gerenciador de relatório como o IReport, já que você esta utilizando sistema WEB

S

Ireport irá auxiliar apenas na montagem do label a ser impresso, agora ele consegue enxergar a impressora instalada na maquina cliente? Realizar a impressão? Se sim vou correr atras dele agora, mas o que eu sei é apenas para montar relatórios.

B

O jeito que fiz não acho que seja o ideal porque gera um arquivo, e esse arquivo eu envio pra impressora.
Bom, vou mostrar como fiz na impressora Zebra TLP2844, pra outros modelos eu não sei se funcionaria do mesmo jeito.
Esse procedimento não é o melhor, mas foi o que funcionou.
A primeira coisa que você precisa fazer é colocar a impressora em modo de compartilhamento, como o cliente usava o Windows, fiz da seguinte maneira:

  1. Tornar a impressora compartilhada
    1.1) Localizar a impressora no painel de controle
    1.2) Clicar com o botão direito em cima do ícone e ir nas propriedades da impressora
    No Windows 7 é a opção "Propriedades da impressora"
    No Windows XP é a opção "Propriedades"
    1.3) Ir na aba compartilhamento, dar um nome para o compartilhamento da impressora

  2. No java fiz os comandos serem enviados pra porta LPT1. Se estiver usando USB, ativar o pool de impressão selecionando LPT1 e o USB da impressora e clicar na caixa de selação “Ativar pool de impressão” e “Ativar suporte bidirecional”.

  3. Gerar um arquivo com o código EPL e salvar com uma extensão qualquer (suponha que o arquivo esteja em C:\)

  4. Pegar o nome do computador onde está a impressora

  5. Abrir o prompt de comando e digitar
    Type C:\codigoEPL.txt > \nomeComputador\nomeImpressora

B

Se vc ver um jeito de usar o ireport ou outputstream ou outro método pra não precisar gerar o arquivo, posta aí pra ver, to querendo fazer isso sem precisar gerar arquivo.

P

Aqui na empresa tinhas justamente esse modelo de impressora Zebra TLP 2844, agora usamos o modelo S4M. O IReport acredito que irá funcionar sim na WEB, pois aqui utilizamos para desktop para fazer imprimir etiquetas.

S

Beto Sagaz:
O jeito que fiz não acho que seja o ideal porque gera um arquivo, e esse arquivo eu envio pra impressora.
Bom, vou mostrar como fiz na impressora Zebra TLP2844, pra outros modelos eu não sei se funcionaria do mesmo jeito.
Esse procedimento não é o melhor, mas foi o que funcionou.
A primeira coisa que você precisa fazer é colocar a impressora em modo de compartilhamento, como o cliente usava o Windows, fiz da seguinte maneira:

  1. Tornar a impressora compartilhada
    1.1) Localizar a impressora no painel de controle
    1.2) Clicar com o botão direito em cima do ícone e ir nas propriedades da impressora
    No Windows 7 é a opção "Propriedades da impressora"
    No Windows XP é a opção "Propriedades"
    1.3) Ir na aba compartilhamento, dar um nome para o compartilhamento da impressora

  2. Gerar um arquivo com o código EPL e salvar com uma extensão qualquer (suponha que o arquivo esteja em C:\)

  3. Pegar o nome do computador onde está a impressora

  4. Abrir o prompt de comando e digitar
    Type C:\codigoEPL.txt > \nomeComputador\nomeImpressora

Aqui funcionou tb, agora vou pensar em algo para rodar no cliente!

P

Veja se este site te ajuda: http://ireport-guide.blogspot.com/2008/05/how-to-execute-jasper-report-through.html

S

Cara a impressão via dos funcionou, mas agora não quer mais funcionar,não sei porque eu envio o comando e a impressão aparece e some do gerenciador de impressão e nada é impresso.

Cara olha o que eu achei

http://code.google.com/p/jzebra/

é um projeto que o cara consegue acessar a impressora direto do cliente e enviar os comandos EPL para impressão testei aqui e deu certo a impressora imprime, tudo via applet, ai tb tem o codigo fonte estou estudando ele agora para ajustar a minha necessidade, vale a pena olhar!

B

Baixei o exemplo no site e gera uma exceção “Printer is not accepting job”. Tentei usar um esquema parecido e gerava a mesma exceção, não sei como resolver isso. O projeto foca bem nessa necessidade, parece bem útil pra essas impressoras. Só sinto falta de um suporte oficial da empresa com exemplos de uso em java.

S

Estranho aqui usando a pagina de exemplo ele reconheceu a impressora e consegui imprimir, unico problema é que ao tentar imprimir sempre imprime a mesma coisa um logo do windows escrito pagina de teste, e no codigo fonte era para ser impresso outra coisa.

S

Olha que show este demo, aqui deu certinho a impressão segue abaixo

http://justtesting.biz/html/jzebra/jzdemo.html

B

Então, ve o pool de impressão pra ver se resolve. Quando a impressora da uma de “louca” eu vejo o arquivo EPL que tem que finalizar com uma linha em branco, depois do último comando vc deve pular uma linha. Se o arquivo EPL, o Pool e o compartilhamento estiverem ok, tenta ainda apagar todos os arquivos de impressão que não foram impressos na pasta “C:\Windows\System32\spool\PRINTERS”, exclui tudo, esses são os arquivos da fila de impressão.
Se ainda não resolver o problema, vc pode tentar jogando os comandos diretamente para a impressora, vai no painel de controle, acha a impressora e vai nas propriedades dela (que nem no item 1 do tutorial). Depois vai na guia Printer > Advanced > Tools e clica no botão Tools.
Digite P1 e clique em Send. Se nada disso resolver, então não sei o que pode ser.

B

Ainda não consegui fazer funcionar, pode ser por que to usando USB, ainda não sei. O jeito que tentei e que gera a mesma exceção foi justamente pra eliminar o arquivo intermediário.
To usando uns selos em um “rolinho” que parece papel higiênico, tem dois selos por linha, o rolo tem 8,4cm de largura, cada selo tem 3,9cm x 2,3cm.

B

Só pra completar o tópico, esse código funcionou escrevendo diretamente na porta LPT1. Se ela for USB deve estar ativado o pool de impressão nas configurações da impressora.

package impressaoZebraTLP2844;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;

import javax.swing.JOptionPane;

public class EscreverLPT1{
	public static void main(String[] args) {
		escreve();
	}
	
	public static void escreve() {
		FileOutputStream os = null;
		String porta = "LPT1";
		try {
			os = new FileOutputStream(porta);
			PrintStream ps = new PrintStream(os);
			ps.println("N");
			ps.println("A212,10,1,2,1,1,N,\"Meu código EPL\"");
			ps.println("P1");
			ps.close();
		} catch (FileNotFoundException e) {
			JOptionPane.showMessageDialog(null, "Não foi possível enviar os dados para impressão\nA porta \""+porta +"\" parece estar inacessível\n"+e.getMessage(), "Erro ao enviar os dados para a porta" , JOptionPane.ERROR_MESSAGE);
		}
	}
}
S

Vou testar este seu codigo para ver como fica, depois preciso de uma ajuda de vcs para montar meu label com a linguagem EPL, utilizei o Zebra Designer mas ao salvar para um arquivo, os valores que quero trocar está criptografados, e ao alterar a impressão sai toda borrada, acho que estou fazendo algo de errado!

S

Amigos obtivemos sucesso para imprimir etiquetas por uma pagina web na impressora local do cliente, utilizando a biblioteca que passei acima, ela nada mais é que um applet que reconhece a impressora instalar na maquina cliente e realiza a impressão.

Minha duvida agora é como gerar um layout personalizado, pois para testes estava utilizando o mesmo layout da documentação da biblioteca acima, tentei criar um layout personalizado usando o Zebra Designer seguindo o tutorial abaixo.

Seguindo os passo deste tutorial
http://www.devmedia.com.br/post-9510-Integrar-impressora-Zebra-TLP-2844-Parte-1.html
http://www.devmedia.com.br/post-9735-Integrar-impressora-Zebra-TLP-2844-Parte-II.html

Gerei meu layout com o zebra designer e na hora de salvar fiz a exportação para um arquivo .prn, editei ele com o bloco de notas, mas para minha surpresa os campos onde deverei realizar as mudanças para as variaveis até mesmo os estaticos, estão com valores que parece lixo e se eu deletar e colocar um novo valor, ao imprimir fica tudo borrado, segue um exemplo.

Etiqueta:

Comando Gerado:

Q1039,019
q831
rN
S4
D7
ZT
JB
OD
R16,0
N
GW34,939,85,65,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
GW37,683,53,196,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
GW317,582,33,33,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
GW585,580,18,33,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
GW505,627,10,33,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
GW587,623,10,33,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?ÿÿÿ
B675,452,2,1C,2,6,160,B,"4110128404610101562055004000002469272495324615"
P1

Alguem sabe me dizer o que devo estar fazendo errado, pois segui o tutorial, gerei o layout e exportei mas na hora de editar aparece esta string monstro, e ao alterar sai tudo borrado!

Obrigado!

B

Olá, vi o tutorial e achei legal as dicas, na segunda parte deste mesmo tutorial ele aconselha a utilizar as fontes Zebra
Obs: Use as fontes do tipo Zebra no programa Zebradesiner, não use fontes gráficas como Arial, times new, courier.

Se você observar o código, a linha que gera as strings estranhas são para formas gráficas, pois segundo o manual da linguagem EPL o comando GW (Direct Graphic Write) serve para desenhar gráficos, no caso você escreve os bytes com esse comando. Todos os outros comandos acima são para configurar o layout do selo, posição etc.
Testei com a fonte Arial e gerou a etiqueta com o comando GW e os bytes que compõe a figura do texto, pois com essa fonte passou a ser um arquivo de imagem, testei com a fonte Zebra1 e ficou algo mais similar ao que estava acostumado a mexer, algo que eu mesmo possa editar.
Resumindo, muda a fonte.

S

Legal amigo deu certo!

Mas ficou bem limitado não tem negrito nem nada, se fosse para gerar um layout mais rico, qual seria a alternativa? Como utilizar este layout com fontes e tudo mais?

Valeu pela ajuda!

B

Então, essa parte de personalizar eu fiz ralando um pouco nas instruções da linguagem EPL, só que é muito teste até chegar no resultado desejado.
No caso vc colocaria manualmente os parâmetros da fonte como tamanho, densidade, expansão horizontal e vertical, etc.
Se vc der uma aprofundada no comando “Ascii Text” acho que poderia ter mais liberdade na formatação do que o próprio Zebra Designer.
Exemplo: A0,0,1,2,1,1,N,“meu texto”

Outra alternativa seria vc ir no painel de controle, clicar em Propriedades da impressora > Aba Printer, depois em Printer Fonts Options… clica em Settings > Download Fonts, escolhe a fonte e depois clica em Font Download. Não testei esse método porque to sem a impressora no momento, mas presumo que cada fonte tem a sua própria formatação. O Zebra Designer tb tem um assistente de fontes.

J

Nos fizemos o layout das etiquetas pelo iReport mesmo, mas é uma coisa bem chatinha tem que ter paciencia e ir testando ate achar a posição correta.
Fora que a zebra muitas vezes precisa de algumas configurações extras, nas impressoras Argox é bem mais facil…

Mas achei interessante este esquema que vc fez vou dar uma olhada…

B

Consegui depois de muito suor, eu envio o arquivo de layout para a impressora com uso de variáveis e armazeno o “formulario” na impressora. Em seguida envio os dados de entrada com comando P1 para impressão, lembrando sempre o uso de quebra de linha no fim de cada arquivo.

Exemplo:
layout.txt
FK"TESTE"
FS"TESTE"
V00,02,N,"–“
V01,07,N,”–“
V02,08,N,”–“
V03,05,N,”–"
D10
ZB
A250,5,0,2,1,1,N,"DANFE SIMPLIFICADO"
A250,25,0,2,1,1,N,"DOCUMENTO AUXILIAR DA"
A250,45,0,2,1,1,N,“NOTA FISCAL ELETRONICA"
A650,5,0,2,1,1,N,V00”-"V01
A650,25,0,2,1,1,N,"NF:"
A700,25,0,2,1,1,N,V02
A650,45,0,2,1,1,N,"SERIE:"
A730,45,0,2,1,1,N,V03
B250,100,0,3,3,7,90,N,"3511 0711 7279 5200 0128 5500 1000 0000 4150 0000 0412"
FE

entrada.txt
FR"TESTE"
?
1
SAIDA
350
1
P1

Criado 14 de junho de 2011
Ultima resposta 22 de dez. de 2011
Respostas 26
Participantes 7