Clique para saber mais...
  Home     Download     Produtos / Cursos     Revista     Vídeo Aulas     Fórum     Contato   Clique aqui para logar | 22 de Janeiro de 2026
  Login

Codinome
Senha
Salvar informações

 Esqueci minha senha
 Novo Cadastro

  Usuários
244 Usuários Online

  Revista ActiveDelphi
 Assine Já!
 Edições
 Sobre a Revista

  Conteúdo
 Apostilas
 Artigos
 Componentes
 Dicas
 News
 Programas / Exemplos
 Vídeo Aulas

  Serviços
 Active News
 Fórum
 Produtos / Cursos

  Outros
 Colunistas
 Contato
 Top 10

  Publicidade

  [Artigos]  Impressão de Código de Barras
Publicado por ActiveDelphi : Quinta, Março 23, 2006 - 08:57 GMT-3 (19090 leituras)
Comentários comentar   Enviar esta notícia a um amigo Enviar para um amigo   Versão para Impressão Versão para impressão
Victory Fernandes Na Internet estão disponíveis diversos componentes para geração e impressão de Código de Barras utilizando o Delphi e impressoras Laser ou Jato de Tinta. Ao trabalharmos com diferentes impressoras, tivemos alguns problemas quanto à resolução, configuração de impressoras, impressão nas margens das etiquetas, impressão de grandes quantidades de etiquetas e etc, o que comprometia a confiabilidade do sistema.

Devido a estes e outros problemas, consideramos que a maneira mais simples, prática e profissional de se imprimir códigos de barras, é utilizando impressoras específicas para impressão de etiquetas e códigos de barras.
Neste artigo fazemos uma abordagem prática para as impressoras Zebra, que utilizam linguagem de script ZPL2, após este estudo, o leitor estará familiarizado com o conceito geral, e pronto para utilizar qualquer impressora do gênero.

Acessando a impressora
Caso deseje, o usuário da impressora pode utilizar softwares prontos disponíveis para download que acompanham a impressora ou são vendidos separadamente. Este não é o tipo de abordagem que desejamos aos nossos clientes. O ideal é que sejamos capazes de oferecer a funcionalidade de impressão de código de barras por dentro dos nossos programas, utilizando uma interface com a qual o usuário já esteja familiarizado. Para isso, é necessário conhecer o formato de comunicação com a impressora.
A impressora em questão não requer nenhum tipo de driver específico para funcionar, bastando que lhe seja passada uma seqüência de comandos ASCII pela porta a qual esta conectada. Sendo assim o acesso pode ser feito até mesmo pelo MS-DOS com um comando do tipo:

COPY “MEU_ARQUIVO.TXT” LPT1 ou COPY “MEU_ARQUIVO.TXT” COM1

Onde “MEU_ARQUIVO.TXT” é um arquivo de texto comum contendo o script em ZPL2 que se deseja executar e deve ser enviado para a porta paralela (LPT1) ou serial (COM)
Este tipo de abordagem de comunicação facilita, e muito, a implementação, uma vez que a nossa única preocupação será conhecer os comandos, utilizando os métodos padrões do Delphi para o envio das strings.


Conhecendo a Linguagem

Os comandos em ZPL2 obedecem a uma sintaxe geral do tipo:

  • A - Comandos
  • p1,p2,p3 - Parâmetros
  • [p1,p2,p3] - Parâmetros opcionais

Apesar da impressora disponibilizar uma infinidade de comandos e opções, tais como contadores, criação e armazenamento de formulários em memória, velocidade de impressão dentre outros. Vamos abordar alguns itens principais:

  • Configuração da Etiqueta
  • Impressão de Textos
  • Impressão de Códigos de Barras

Sempre que desejarmos imprimir uma determinada etiqueta devemos seguir um procedimento geral indicado pela impressora:

  • Inicialmente devemos indicar o início de formatação da etiqueta, Comando XA.
  • Enviamos à impressora os comandos relativos à configuração e montagem da nova etiqueta –Comandos Texto e Código de Barras.
  • Uma vez concluída a montagem da etiqueta, com o Comando PQ determina-se a quantidade de impressão.
  • O Comando XZ decretará o término da formatação.

Veremos agora a análise de cada um dos comandos citados separadamente:

Modo de Formatação
O primeiro Comando passado à impressora será o Comando XA, que indicará o início no modo de formatação da etiqueta.

Impressão de Textos
Para impressão de textos formatados na etiqueta, utilizamos o Comando_Texto_ZPL2, que nada mais é do que a junção de vários comandos da impressora e cuja sintaxe é mostrada abaixo:

Onde,
p1 - margem esquerda em pontos (8 pontos/mm).
default: 0
0-9999

p2 - margem superior em pontos(8 pontos/mm).
default:0
0-9999

p3 - inverter cores
Ao enviarmos este parâmetro, a impressora inverte as cores pretas em brancas e vice-versa .

p4 - tipo fonte
A..Z
1..9

p5 - orientação

Valor Descrição
N Sem rotação
R Rotação de 90º
I Rotação de 180º
B Rotação de 270º
Tabela 01. Valores de Rotação

p6 - altura fonte em pontos (8 pontos/mm)
default: 15
10-1500 pontos

p7 - largura fonte em pontos(8 pontos/mm)
default: 12
10-1500 pontos

p8 - Texto (informação a ser impressa)

Chamamos a função texto da seguinte forma:

Texto_ZPL2(20,                 //Margem Esquerda
           70,                 //Margem Superior
           Teste de Impressao, //Texto
           N,                  //Inverter Cores
           N,                  //Orientação
           N,                  //Tipo fonte
           15,                 //Altura Fonte
           15);                //Largura Fonte

A Listagem 01 mostra o retorno do script ZPL2 após a chamada feita acima:

^FO20,70
^AN,N,15,15
^FDTeste de Impressao
^FS

Listagem 01. Formatação do texto

Impressão de Código de Barras
Para impressão de códigos de barras nos mais diversos formatos, utilizamos o Comando Código_Barras_ZPL2, uma junção de vários comandos da impressora e cuja sintaxe é mostrada abaixo:
Bp1,p2, p3,p4, p5,p6

Onde,
p1 - margem esquerda em pontos (8 pontos/mm).
default: o
0-9999

p2 - margem superior em pontos(8 pontos/mm).
default:0
0-9999

p3 - tipo código
1, 2, 3, 4, 7, 8, 9, A, B, C, D, E, F,
I, J, K, L, M, P, Q, S, U, X, Y, Z.

p4 Orientação

Valor Descrição
N Sem rotação
R Rotação de 90º
I Rotação de 180º
B Rotação de 270º
Tabela 02. Valores de Rotação

p5 - inverter cores
Ao enviarmos esse parâmetro a impressora inverte as cores pretas em brancas e vice-versa.

p6 - Código (valor do código de barras).

Chamamos a função Código_Barras_ZPL2 da seguinte forma:

Codigo_Barras_ZPL2(20,  //Margem Esquerda
                   70,  //Margem Superior
                   1,   //Tipo fonte
                   123, //Código
                   N,   //Inverter Cores
                   N);  //Orientação

A Listagem 02 mostra o retorno do script ZPL2 após a chamada feita acima:

^FO20,70
^B1N
^FD123
^FS
Listagem 02. Formatação do Código de Barras

Comandos Finais da Etiqueta
Após passarmos todos dados para a etiqueta, determinamos a quantidade de etiqueta a ser impressa através do Comando PQ, com sintaxe:

PQ p1

p1 determina a quantidade de cópias, 1 até 99.999.999.
O comando XZ determina o termino da formatação.

O Programa Exemplo
Veja na Figura 01 a tela do aplicativo demonstrativo criado:


Figura 01. Tela principal do exemplo de utilização de Impressora de Código de Barras

Este programa exemplifica a impressão de códigos de barras. Nele podemos:

  • Configurar todos os parâmetros de formatação dos comandos XA, Texto, Código de Barras, PQ, XZ.
  • Adicionar e excluir produtos para impressão.
  • Visualizar a codificação em ZPL2 gerada para impressão das etiquetas.
  • Salvar um arquivo de script ZPL2 para impressão futura.
  • Abrir um arquivo de script ZPL2 para impressão.
  • Imprimir códigos de barras em qualquer impressora paralela compatível com ZPL2.

Nele foram implementadas as chamadas às funções de impressão de texto e código de barras, descritas anteriomente, como mostrado:

Function Comando_XA: String;
Procedure Texto_ZPL2(p1,p2 p3,p4,p5,p6,p7,p8 :string)
Procedure Codigo_Barras_ZPL2(p1, p2, p3, p4, p5, p6: string)
Function Comando_PQ(q: String): String;
Function Comando_XZ: String;

O programa faz sucessivas chamadas a estas funções, de acordo com a quantidade de produtos contida no componente TListview e a quantidade de etiquetas por produto definida pelo usuário, para gerar o script em ZPL2 que é enviado para o componente TMemo.
Uma vez o script em ZPL2 pronto, utilizamos uma função de escrita na porta da impressora para enviar os comandos contidos no componente TMemo para a impressora instalada na porta paralela, como mostrado:

procedure DirectPrint(s: String);
var
  PTBlock : TPassThroughData;
begin
  PTBlock.nLen := Length(s);
  StrPCopy(@PTBlock.Data, s);
  Escape(printer.handle, PASSTHROUGH, 0, @PTBlock, nil);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  //impressao do codigo de barras
  if memo1.Lines.Count > 0 then
  begin
    Printer.BeginDoc;
    DirectPrint(memo1.Lines.Text);
    Printer.EndDoc;
  end;
end;

A ZPL2_Unit
As chamadas dos comandos da impressora demonstradas durante o artigo foram feitas utilizando a ZPL2_Unit.pas, uma Unit desenvolvida em Delphi de acordo com o manual de referência da linguagem ZPL2 para geração de script utilizado nas impressoras de código de barras Zebra.
As vantagens de utilizar a ZPL2_Unit incluem:

  • Completa abstração da camada de geração do script, sendo necessário apenas fazer chamadas às funções da Unit para os comandos desejados.
  • Velocidade na implementação da comunicação com a impressora.
  • Geração de etiquetas com texto e código de barras de forma muito simples.
  • Facilidade na geração de código ZPL2

Maiores informações sobre a ZPL2_Unit podem ser obtidas no site do produto em http://www.igara.com.br/produto.php?cod_produto=46

Conclusão
Agora que você está familiarizado com as principais opções das impressoras, fica muito mais fácil partir para implementações mais elaboradas, que utilizem outros recursos não abordados neste artigo, como opções de contadores, temporizadores, impressão de imagens e logomarcas, impressão de formulários etc...
Maiores informações sobre impressoras de códigos de barras, bem como download de manuais podem ser encontradas no site do fabricante em http://www.zebra.com

 

Victory Fernandes é desenvolvedor sócio da TKS Software - Soluções de Automação Comercial e Softwares Dedicados. Pode ser contactado em victory@igara.com.br, ou através dos sites http://www.victory.hpg.com.br - http://www.enge.cjb.net – http://www.igara.com.br.

Augusto Frederico é estudante de Engenharia Mecatrônica e desenvolvedor da TKS Software - Soluções de Automação e Softwares Dedicados. Pode ser contactado em fredygbi@yahoo.com.br



Observação: Uma abordagem prática ZEBRA ZPL2
por Victory Fernandes e Augusto Frederico


Comentários Comentários
   Ordem:  
Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos.
  Edição 112

Revista ActiveDelphi

  50 Programas Fontes


  Produtos

Conheça Nossos Produtos

Copyright© 2001-2016 – Active Delphi – Todos os direitos reservados