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