Impressão de Código de Barras
Autor: Egilson Silva | Publicado: 2011-02-21T19:11:00-03:00

Uma abordagem prática Argox PPLBpor Victory Fernandes e Augusto Frederico&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  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  Argox, que utilizam linguagem de script PPLB, após  este estudo, o leitor estará familiarizado com o conceito geral, e pronto para  utilizar qualquer impressora do gênero.
Acessando a impressoraCaso 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 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ou &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; COPY “MEU_ARQUIVO.TXT” COM1
Onde “MEU_ARQUIVO.TXT” é um arquivo  de texto comum contendo o script em PPLB 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 LinguagemOs comandos em PPLB  obedecem a uma sintaxe geral do tipo:
·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Comandos·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  p1,p2,p3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Parâmetros·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  [p1,p2,p3]&nbsp;&nbsp;&nbsp;&nbsp; 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:·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Configuração da Etiqueta·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Impressão de Textos·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Impressão de Códigos de Barras
De maneira geral a impressora trabalha com um buffer de  impressão onde são armazenados os comandos recebidos, é como se a impressora  montasse uma imagem virtual da etiqueta a ser impressa, dessa forma, sempre que  se deseja imprimir uma etiqueta diferente, é necessário seguir um procedimento  geral:·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Antes de tudo, temos que executar a limpeza do buffer de  impressão - Comando N.·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Após fixaremos as  dimensões da etiqueta bem como o seu gap (espaço entre as etiquetas).  A altura e o gap, com o Comando Q. Para a largura, utilizamos o Comando  q.·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Com o Comando R definimos as coordenadas do ponto  inicial da impressão.·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Após esse processo, a  impressora estará pronta para receber os comandos relativos a montagem da nova  etiqueta – Comandos A (Texto) e B (Código de  Barras).·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Uma vez concluída a  montagem da etiqueta, com o Comando P  determina-se a quantidade de impressão e envia a  autorização para imprimir.
Veremos agora a análise de cada um dos comandos  citados separadamente:
Limpeza de BufferAntes de passarmos qualquer novo comando de impressão de  etiqueta é necessário limpar o buffer de imagem da impressora através da  passagem do Comando N, que não aceita  nenhum parâmetro, para evitar que haja sobreposição dos conteúdos a serem  impressos.
Dimensões da EtiquetaEm seguida definiremos as dimensões da etiqueta. O comando Q é encarregado da altura e do espaço  entre as etiquetas, gap. Para rolo contínuo o gap possuí valor igual a 0. Com a seguinte sintaxe:&nbsp;  Qp1,p2p1 comprimento  de etiqueta (em pontos*)p2 gap
A largura&nbsp;  é definida pelo comando q, com formato:Qp1p1 largura (em  pontos*).
&nbsp;Dimensões Máximas  permitidas:
  
  Modelo 203 dpi  Modelo 300 dpi
  Largura (X)  0 a 811 pixels (101mm)  0 a 1299 pixels (108mm)
  Comprimento(y)  0 a 8728 pixels (1090mm)  0 a 8728 pixels (727mm) 
  Tabela 01. Dimensões  Permitidas.Caso as dimensões não sejam corretamente fixadas poderão ocorrer  erros de impressão, tais como: desposicionamento de  impressão, impressão de etiquetas em branco, parada na impressora, dentre  outros.
* nos modelos 203 dpi, existem  8 pontos(pixels) em cada  milímetro linear,nos modelos 300 dpi, existem 12 pontos(pixels) em  cada milímetro linear.
Definição dos EixosDevemos determinar o ponto inicial da impressão, para isso  utilizamos o Comando R para a  definição dos eixos X e Y respectivamente.Com sintaxe:Rp1,p2p1&nbsp; margem horizontal (X)p2&nbsp; margem vertical(Y)&nbsp; Impressão de TextosPara impressão de textos formatados na etiqueta, utilizamos o  Comando A, cuja sintaxe é mostrada  abaixo:
Ap1,p2, p3,p4, p5,p6, p7, “TEXTO”
Onde,p1&nbsp;&nbsp;&nbsp;&nbsp; Eixo Y em pontos (Vide tabela 1).p2&nbsp;&nbsp;&nbsp;&nbsp; Eixo X em pontos (Vide tabela 1).p3&nbsp;&nbsp;&nbsp;&nbsp; Rotação

  &nbsp;Valor  Descrição
  0  Sem rotação
  1  Rotação de 90º
  2  Rotação de 180º
  3  Rotação de 270º
  Tabela 02. Rotação valores  Permitidos.
p4&nbsp;&nbsp;&nbsp;&nbsp; Fonte&nbsp;  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1,2,3,4,5 Fontes residentes 1 a 5(realiza exemplo para  melhores informações).&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  A até Z&nbsp;&nbsp;  Fontes carregadas na memória. p5&nbsp;&nbsp;&nbsp;&nbsp; Valor de expansão horizontal do texto (1 a  24).p6&nbsp;&nbsp;&nbsp;&nbsp; Valor de expansão vertical do texto (1 a  24).p7&nbsp;&nbsp;&nbsp;&nbsp; Forma de impressão : N(normal); R(reverso).  “TEXTO”&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Informação a ser impressa.
Chamamos a função texto da seguinte forma:&nbsp; Texto_PPLB(175,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //eixo  x&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //eixo  y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //rotação&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  3,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //tipo  fonte&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  10,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //multiplicador horizontal,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  10,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //multiplicador vertical&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;false,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //imprime  reverso&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Teste de impressão);
A Listagem 01  mostra o retorno do script PPLB após a chamada feita acima:&nbsp; NA175,20,0,3,10,10,N,"Teste de Impressao"P1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  Listagem 01. formatação de um texto:&nbsp;  
Os comandos N e P, indicarão o início e o término da  formatação. P também indica a  quantidade de cópias.Impressão de Código de BarrasPara impressão de códigos de barras nos mais diversos  formatos, utilizamos o Comando B,  cuja sintaxe é mostrada abaixo:Bp1,p2, p3,p4, p5,p6, p7,p8, “VALOR”Onde,·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  p1&nbsp;&nbsp;&nbsp;&nbsp; Eixo_Y (ver  tabela 1)·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  p2&nbsp;&nbsp;&nbsp;&nbsp; Eixo_X (ver  tabela 1)·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  p3&nbsp;&nbsp;&nbsp;&nbsp; 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 03. Rotação valores  permitidos
p4&nbsp;&nbsp;&nbsp;&nbsp; Tipo do Código de Barras 

  Valor  Tipo de Código de Barras   Dígitos
  0  Código 128 UCC  Variável
  1  Código 128(A,B,C automático)  Variável
  1E  UCC/EAN  Variável
  2  Intercalado 2 de 5 (ITF,125,Interleaved 2 de 5, intercalado 25 )  Variável
  2C  Intercalado 2 de 5 com dígito  verificador MOD10  Variável
  2D  Intercalado 2 de 5 com dígito  verificador humano legível  Variável
  2G  German Postcode&nbsp;   Variável
  2M  Matrix 2  de 5 (Matriz 25)  Variável
  2U  UPC intercalado 2 de 5  Variável
  3  Código 39 (código 3 de 9)  Variável
  3C  Código 39 com digito verificador  Variável
  9  Código 93  Variável
  E30  EAN-13(EAN/JAN-13)  Fixo
  E32  EAN-13&nbsp;  2 dígitos adicionais  Fixo
  E35  EAN-13 5 dígitos adicionais  Fixo
  E80  EAN-8&nbsp;&nbsp;  (EAN-JAN-8)  Fixo
  E82  EAN-8 2 dígitos adicionais  Fixo
  E85  EAN-8 5 dígitos adicionais  Fixo
  K  Codabar  Variável
  P  Postnet  Fixo
  UA0  UPC-A  Fixo
  UA2  UPC-A 2 dígitos adicionais  Fixo
  UA5  UPC-A&nbsp;  5 dígitos adicionais  Fixo
  UE0  UPC-E  Fixo
  UE2  UPC-E&nbsp;  2 dígitos adicionais  Fixo
  UE5  UPC-E&nbsp;  5 dígitos a adicionais  Fixo
  Tabela 04. Tipo de Código de Barras·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  p5&nbsp;&nbsp;&nbsp;&nbsp; Espessura da barra fina(ver tabela 5).·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  p6&nbsp;&nbsp;&nbsp;&nbsp; Espessura da barra larga(ver tabela  5).·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;
  Tipo  Razão  Barra Fina x Grossa  Código de Barra
  B2  1:2 a 1:3  Fina&lt;Grossa  Código 39, Codabar, Intercalado 25,  Matriz 25, Postnet e German  Postcode
  B3  2:3:4  Fina=Grossa2 x Fina3 x Fina4 x Fina  Código 93, código 128, EAN-8, EAN-13, UPC-A, UPC-E, UCC/EAN e Código 128 UCC
  Tabela 05. Tabela de valores de Barras·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  p7&nbsp;&nbsp;&nbsp;&nbsp; Altura do código de barras (definido pelo  usuário)·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  p8&nbsp;&nbsp;&nbsp;&nbsp; Forma de impressão : N(normal); R(reverso).  ·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;“VALOR” Informação  a ser impressa em código de barras
Codigo_Barra_PPLB(20,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //eixo x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  20,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //eixo y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //rotação&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  E80,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //tipo código Barra&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  3,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //barra  fina&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  3,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //barra  larga&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  41,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //altura  barra&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  true,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //mostra valor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  0123459);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //valor&nbsp; Código
A Listagem 02  mostra o retorno do script PPLB após a chamada feita acima:&nbsp; NB20,20,0,E80,3,3,41,B,”0123459”P1  Listagem 02. Exemplifica a formatação  de um Código de Barras:Os comandos N e P, indicarão o início e o término da  formatação. P também indica a  quantidade de cópias.
Comandos Finais da EtiquetaApós passarmos todos  dados para a etiqueta determinamos a quantidade de etiqueta a ser impressa e  comando de impressão através do Comando  P, com sintaxe:P p1 [,p2]p1 determina a quantidade de cópias, 1 até  65.535.p2&nbsp; quantidade  de cópias de cada etiqueta, 1 até 65.535. 
O Programa ExemploVeja na Figura 01 a tela do aplicativo  demonstrativo criado:&nbsp;    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:·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Configurar todos os parâmetros de formatação dos comandos  Q, q, R, A, B, P.·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Adicionar e excluir produtos para impressão.·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Visualizar a codificação em PPLB gerada para impressão das  etiquetas.·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Salvar um arquivo de script PPLB para impressão futura.·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Abrir um arquivo de script PPLB para impressão.·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Imprimir códigos de barras em qualquer impressora paralela  compatível com PPLB.
Nele foram implementadas as chamadas às funções de impressão de  texto e código de barras, descritas anteriomente, como  mostrado:
Function Comando_N: String;Function Comando_Q(p1, p2: string): String;Function Comando_q(p1: string): String;Function Comando_R(p1, p2: string): String;Function Comando_A(p1, p2, p3, p4,P5,p6,p7,texto:string):  String;Function Comando_B(p1,p2,p3,p4,P5,p6,p7,p8,valor: String):  String;Function Comando_P(p1,p2: string): 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&nbsp; usuário, para gerar o script em PPLB&nbsp; que é enviado para o componente TMemo.Uma vez o script  em PPLB 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&nbsp; PTBlock : TPassThroughData;begin&nbsp;&nbsp; PTBlock.nLen :=  Length(s);&nbsp;&nbsp; StrPCopy(@PTBlock.Data, s);&nbsp;&nbsp; Escape(printer.handle, PASSTHROUGH, 0, @PTBlock, nil);end;
procedure TForm1.Button2Click(Sender: TObject);begin&nbsp;//impressao do codigo de barras&nbsp;if memo1.Lines.Count &gt; 0 then&nbsp; begin&nbsp;&nbsp; Printer.BeginDoc;&nbsp;&nbsp; DirectPrint(memo1.Lines.Text);&nbsp;&nbsp; Printer.EndDoc;&nbsp; end;end;A PPLB_UnitAs chamadas dos comandos da impressora demonstradas durante o  artigo foram feitas utilizando a PPLB_Unit.pas, uma Unit desenvolvida em Delphi de acordo com o manual de  referência da linguagem PPLB para geração de script utilizado nas impressoras de  código de barras Argox.As vantagens de  utilizar a PPLB_Unit incluem:·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  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.·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Velocidade na implementação da comunicação com a impressora ·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Geração de etiquetas com texto e código de barras de forma  muito simples ·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Facilidade na geração de código PPLB
Maiores informações sobre a PPLB_Unit podem ser obtidas no  site do produto em &nbsp;http://www.igara.com.br/produto.php?cod_produto=84
ConclusãoAgora 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.argox.com.Maiores informações sobre a PPLB_Unit podem ser obtidas no  site do produto em &nbsp;http://www.igara.com.br/produto.php?cod_produto=84

fonte:// http://www.activedelphi.com.br/imagens/artigos/codigo_barras_PPLB.htm