Impressão de Código de Barras

Uma abordagem prática Datamax DPL

por Victory Fernandes e Augusto Frederico

                                                                                                          

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 Datamax, que utilizam linguagem de script DPL, 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 DPL 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 DPL obedecem a uma sintaxe geral do tipo:

·         A                  Comandos

·         p1,p2,p3       Parâmetros

·         [p1,p2,p3]     Parâmetros opcionais

 

Apesar da impressora disponibilizar de 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 entrar no modo de formatação, Comando STX L.

·         Indicaremos a notação conveniente, Comando STX m (milímetros) ou Comando STX n (polegadas).

·         O comprimento da etiqueta é indicado pelo Comando STX M.

·         Determinamos a posição inicial de impressão, Comando STX O e a resolução de impressão dos pontos Comando D.

·         Após esse processo, a impressora estará apta a receber os comandos relativos a montagem da nova etiqueta – Comandos Texto e Código de Barras.

·         Uma vez concluída a montagem da etiqueta, com o Comando Q determina-se a quantidade de impressão.

·         O Comando E decretará o término da formatação e imprime a etiqueta. 

 

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

 

Modo de Formatação

O primeiro Comando passado a impressora será o STX L, que indicará o início no modo de formatação da etiqueta.

 

Definição da Notação

Torna-se necessário definirmos a unidade de comprimento que iremos trabalhar a partir do momento. Geralmente, o Comando STX m, que não aceita nenhum parâmetro e determina a unidade milímetros, porém também é usado o Comando STX n se o programador utilizar a unidade polegadas. A partir disso todos os valores passados à impressora serão interpretados de acordo com a escolha de um dos comandos acima.

 

Comprimento da Etiqueta

   O Comando Stx M determina comprimento máximo da etiqueta. 

Possui a seguinte sintaxe:

 <Stx> Mxxxx

em que xxxx é o valor do comprimento possuidor de 4 dígitos.

 

Valores admitidos: 

Impressoras

Default (comprimento)

Allegro, Allegro 2, DMX400, DMX430, Ovation!, Ovation!2, Prodigy Plus, Prodigy

12 polegadas/ 304,8 mm

Prodigy Max, PE42, PE43, DMX600, DMX800, Titan, XL

16 polegadas/ 406,4 mm

S-Class 3210 Series

19 polegadas/ 482,6 mm

Tabela 1.Impressoras e valores default

 

Posição da impressão

A posição inicial de impressão é determinada pelo Comando STX O, com a seguinte sintaxe:

<Stx> Oxxxx

 em que o xxxx representa o valor em polegadas ou milímetros possuindo 4 dígitos.

Valores de default :

  

Impressora

Polegadas (default)

Milímetro (default)

Prodigy

0250

0635

Prodigy Plus, Titan

0110

0279

Prodigy Max

110/250

0279/0635

All others

0220

0559

 Tabela  2.Valores iniciais em polegadas e milímetro

 

Resolução dos Pontos

Após a definição da posição inicial de impressão, devemos determinar as dimensões dos pontos, com o Comando D, que possui a seguinte sintaxe:

Dxx

 

Em que a primeira variável representa a largura do ponto e a segunda, a altura.

 

A tabela a seguir nos informa alguns valores aceitáveis para o Comando D:

 

Resolução(DPI)

Polegadas(Tamanho do ponto)

Milímetros(Tamanho do ponto)

203

.0049

.125

300

.0033

.085

152

.0066

.167

289(DMX 430 somente)

.0035

.088

Tabela 3.Resolução dos pontos polegadas, milímetros

 

Impressão de Textos

Para impressão de textos formatados na etiqueta, utilizamos o Comando texto, cuja sintaxe é mostrada abaixo:

 

Ap1, p2,  p3, p4, p5, p6,  p7, “TEXTO”

 

Onde,

·         p1     Rotação

 

 Valor

Descrição

1

Sem rotação

2

Rotação de 90º

3

Rotação de 180º

4

Rotação de 270º

Tabela  4.Rotação, valores possíveis

 

·         p2     Fonte 

            0...8

·         p3     Largura

                1...9

                A...O

·         p4     Altura

              1...9

              A...O

·         p5     Código.

      Possui valor fixo em  000.

·         p6     Coordenadas Eixo Y

Determina a posição vertical a ser impressa

                   0001 a 9999

·         p7     Coordenadas Eixo X.

Determina a posição horizontal a ser impressa.

Impressora

Polegadas (Maximo valor)

Milímetros (Maximo valor)

Allegro, Allegro 2, DMX 400, PE42, Prodigy Max, XL

0410

1041

DMX430

0398

1011

DMX600

0640

1625

DMX800

0860

2184

Ovation!, Ovation!2

0410

1041

Prodigy

0447

1135

Prodigy 152, Prodigy Plus 152

0410

1041

Prodogy Plus

0410

1041

Ovation!2, PE43, Prodigy Max

0410

1041

S-class 3210 Series

0315

0800

Titan

0661

1680

Tabela 5.Valor máximo da posição horizontal

 

“TEXTO” Informação a ser impressa.

Chamamos a função texto da seguinte forma:

  Texto_DPL(1,              //Rotacao

                     2,              //Fonte_ID

                     1,              //Largura

                     1,              //Altura

                     000,          //Código            

                     0020,        //Posição da Fileira

                     0175,        //Posição da coluna

                     Texto);      //Texto

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

<STX>L

121100000200175Texto

Q00001

E

 Listagem 01. Formatação de um texto: 

Os comandos STX L, Q, E funcionam como o início da formatação, quantidade de etiqueta e fim de formatação respectivamente. 

Impressão de Código de Barras

Para impressão de códigos de barras nos mais diversos formatos, utilizamos o Comando CodBarras, cuja sintaxe é mostrada abaixo:

Bp1, p2, p3, p4, p5, p6, p7, “VALOR

 

Onde,

·         p1     Rotação

Valor

Descrição

1

Sem rotação

2

Rotação de 90º

3

Rotação de 180º

4

Rotação de 270º

Tabela 6.Valores possíveis da rotação

 

·         p2     Fonte id

                          A até Z

                         a até  z(menos P,u,v,z)

·         p3     Largura

                         1...9

                         A até O

·         p4     Altura

                         1...9

             A até O

·         p5    Código

              001 a 999

·         p6     Eixo_Y (ver tabela 1)

      Determina a posição vertical a ser impressa             

0001 a 9999

·         p7     Eixo_X (ver tabela 1)

 

Determina a posição horizontal a ser impressa.

Impressora

Polegadas (Maximo valor)

Milímetros (Maximo valor)

Allegro, Allegro 2, DMX 400, PE42, Prodigy Max, XL

0410

1041

DMX430

0398

1011

DMX600

0640

1625

DMX800

0860

2184

Ovation!, Ovation!2

0410

1041

Prodigy

0447

1135

Prodigy 152, Prodigy Plus 152

0410

1041

Prodogy Plus

0410

1041

Ovation!2, PE43, Prodigy Max

0410

1041

S-class 3210 Series

0315

0800

Titan

0661

1680

Tabela 7.Valores Máximos da posição horizontal

 

 “VALOR” Informação a ser impressa em código de barras

CodBarras_DPL(1,                         //Rotacao

                            1,                         //Fonte_ID                                                           

                            2,                         //Largura                                                         

                            1,                         //Altura                                                           

                            009,                     //Código                                                         

                            0020,                   //Posição da Fileira                                       

                            0070,                   //Posição da coluna                                        

                            123);                    //Valor                            

  

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

<STX>L

112100900200070123

Q00001

E

 

Listagem 02.Formatação de um Código de Barras

Os comandos STX L, Q, E funcionam como o início da formatação, quantidade de etiqueta e fim de formatação respectivamente. 

 

Comandos Finais da Etiqueta

Após passarmos todos dados para a etiqueta determinamos a quantidade de etiqueta a ser impressa com o Comando Q:

Qxxxx

xxxx é uma variável inteira de Q, contendo o número de cópias que se deseja.

Com isso, só nos resta terminar a formatação de etiqueta e imprimi-la, trabalho este realizado pelo Comando E.

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 STX L, STX m, STX M, STX O, D,Texto DPL, CodBarras DPL, Q, E.

·         Adicionar e excluir produtos para impressão.

·         Visualizar a codificação em DPL gerada para impressão das etiquetas.

·         Salvar um arquivo de script DPL para impressão futura.

·         Abrir um arquivo de script DPL para impressão.

·         Imprimir códigos de barras em qualquer impressora paralela compatível com DPL.

 

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

 

Function Comando_STX_L: String;

Function Comando_STX_m: String;

Function Comando_STX_M(p1: string): String;

Function Comando_STX_O(p1: string): String;

Function Comando_D(p1, p2: string): String;

Function Texto_DPL (p1, p2, p3, p4, p5, p6:string): String;

Function CodBarras (p1,p2,p3,p4,p5,p6,p7, valor:string): String;

Function Comando_Q(p1: byte): String;

Function Comando_E: String;

O programa faz sucessivas chamadas à 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 DPL  que é enviado para o componente TMemo.

Uma vez o script em DPL 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 DPL_Unit

As chamadas dos comandos da impressora demonstradas durante o artigo foram feitas utilizando a DPL_Unit.pas, uma Unit desenvolvida em Delphi de acordo com o manual de referência da linguagem DPL  para geração de script utilizado nas impressoras de código de barras Datamax.

·         As vantagens de utilizar a DPL_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 DPL.

 

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


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

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

 

 

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 www.victory.hpg.com.br  - www.enge.cjb.net  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