Tutorial de ZPL: comandos, exemplos e prévia. Veja o visualizador ZPL online grátis.

A língua que a Zebra fala de verdade. Crie no navegador e depois copie o ZPL.

Tutorial de ZPL: comandos e exemplos

Publicado em: · 9 min de leitura · Referência

Este tutorial de ZPL cobre os poucos comandos por trás de toda etiqueta Zebra: ^XA e ^XZ para começar e terminar, ^FO para posicionar um campo, ^A0 para escolher a fonte, ^FD e ^FS para os dados, e ^BC e ^BQ para códigos de barras. Cada um vem com um exemplo que você pode colar num visualizador.

Precisa de uma prévia? Abra o visualizador ZPL grátis e cole o seu código ^XA. Para criar a etiqueta antes, use o criador de etiquetas grátis. Sem cadastro.

O que é ZPL

Toda etiqueta que uma Zebra imprime é um pequeno programa em ZPL, a Zebra Programming Language.

A impressora não aceita PDF nem arquivos do Word. Ela recebe comandos ZPL, um depois do outro, até chegar a um marcador que diz que a etiqueta acabou. Aí a cabeça de impressão dispara.

Você não precisa aprender ZPL para imprimir. O criador de etiquetas grátis escreve o código para você. Mesmo assim, o básico ajuda, por dois motivos:

No fim, você vai conseguir olhar uma string ZPL e ter uma ideia da etiqueta que ela gera. A última parte mostra como funciona o Copy ZPL, para você encaixar no seu próprio fluxo.

A estrutura de uma etiqueta ZPL

A etiqueta ZPL mais simples possível é assim:

// Start a label
^XA

// Move to position (50, 50) and print "Hello World"
^FO50,50^A0N,36,36^FDHello World^FS

// End the label, fire the printer
^XZ

Toda etiqueta, por mais complexa que seja, começa com ^XA e termina com ^XZ. Tudo no meio é uma sequência de comandos.

Cada comando é um acento circunflexo (^) e duas letras que dão o nome, mais parâmetros opcionais separados por vírgulas.

O exemplo usa o mínimo:

Pontos, DPI e por que as coordenadas parecem estranhas

Todas as coordenadas e tamanhos em ZPL são em pontos, a resolução física da cabeça de impressão. Três faixas de DPI cobrem quase tudo:

Parece detalhe, mas muda a impressão. A mesma string ZPL cai em lugares diferentes em impressoras com DPI diferente.

Um ^FO100,100 numa impressora de 203 DPI coloca o campo a cerca de meia polegada da borda. Numa de 600 DPI, o mesmo comando coloca a cerca de 0.17 polegada. O ZPL não faz ideia do que é uma polegada. Tudo é ponto.

É por isso que o mylabelmaker acompanha o DPI da impressora ativa e renderiza na resolução nativa dela. Por que a sua Zebra imprime borrado em 300 DPI conta a história completa.

Os comandos ZPL que você mais vai ver

Comando O que faz
^XAInício da etiqueta. Sempre a primeira coisa.
^XZFim da etiqueta. A impressora dispara quando vê isso.
^PW nLargura de impressão em pontos. Opcional; o padrão é a largura da etiqueta carregada na impressora.
^LL nComprimento da etiqueta em pontos. A mesma ideia, para a altura.
^PQ nPrint Quantity. ^PQ3 quer dizer “imprima 3 cópias desta etiqueta”.
^FO x,yField Origin. Onde colocar o próximo elemento.
^FD textoField Data. O conteúdo de fato de um campo de texto ou de código de barras.
^FSField Separator. “Terminei de definir este campo.”
^A0N,h,wUsa a fonte escalável 0, rotação N (normal), altura de h pontos, largura de w pontos.
^BCCódigo de barras Code 128.
^BQQR code.
^BY w,r,hDefine os padrões do campo de código de barras (largura do módulo, proporção, altura).
^GFAGraphic Field, ASCII. O comando mais poderoso. Embute um bitmap de 1 bit direto no ZPL.
^MD nMedia Darkness. De 0 a 30. Controla o quanto a impressão sai escura. (Maior = mais escuro.)
^PR nPrint Rate. Polegadas por segundo que a cabeça percorre. Menor = mais nítido, maior = mais rápido.
~JRReinicia a impressora (raramente necessário).

Só com esses você escreve uma etiqueta completa à mão. Uma etiqueta de produto pequena, com nome, preço e código de barras, tem umas dez linhas.

Cole um trabalho curto e veja o ZPL no navegador para conferir ^FO, ^A, ^BC ou ^BQ antes de imprimir.

Um exemplo de ZPL, linha por linha

Aqui vai uma etiqueta mais completa, do tipo que o mylabelmaker gera quando você cria uma etiqueta de envio:

^XA
^MD12
^PR4
^PW812
^PQ1
^FO0,0
^GFA,121800,121800,150,[hex bitmap data omitted]^FS
^XZ

Esse ^GFA é o jeito padrão do mylabelmaker. Ele renderiza a área de edição inteira (texto, códigos de barras, QR, formas, imagens) num único bitmap no DPI nativo da impressora e manda tudo como um só campo gráfico.

É o jeito mais confiável de fazer a etiqueta impressa ficar igual à tela, porque ele pula a renderização de fontes da própria impressora, a geração de códigos de barras e qualquer peculiaridade do firmware.

Bom saber: a alternativa é um ZPL que usa as fontes internas da impressora (^A0) e os codificadores de código de barras dela (^BC, ^BQ). Essas strings são menores, mas prendem você às fontes que a sua impressora tem carregadas e à implementação de código de barras dela. Pré-renderizar em ^GFA faz o mesmo ZPL sair idêntico em qualquer Zebra com o mesmo DPI.

Tire o ZPL do mylabelmaker

Você não precisa escrever nada disso. O editor gera o ZPL de tudo o que você criar. Para pegar o código:

  1. Abra https://app.mylabelmaker.com. Sem cadastro.
  2. Escolha um tamanho e coloque texto, códigos de barras, QR codes ou imagens, o que a etiqueta precisar.
  3. Abra as configurações da impressora (o ícone de engrenagem) e use Auto-detect (detecção automática), para a etiqueta renderizar no DPI real da sua impressora.
  4. Clique em Options no canto superior direito do editor e depois em Copy ZPL (copiar ZPL). A string completa ^XA … ^XZ da etiqueta atual vai para a área de transferência.
  5. Cole onde precisar: um arquivo de texto, um servidor de impressão, uma requisição para a sua API de expedição, uma mensagem de chat.
mylabelmaker Save Options ▾ Copy ZPL Export label Import label
Menu Options no cabeçalho do editor. O Copy ZPL coloca o ZPL nativo da etiqueta atual na área de transferência. Para conferir o código copiado antes de ele ir para a impressora, cole no visualizador ZPL online.

Variáveis e impressão em lote

Quando você imprime em lote a partir de um CSV ou de uma planilha do Google, o mylabelmaker gera uma string ZPL separada para cada linha, com os valores daquela linha preenchidos, e manda uma depois da outra.

O Copy ZPL copia só a linha atual. Isso é útil para testar uma linha no seu backend antes de soltar a planilha inteira.

Mande ZPL pelo seu próprio código

Com a string em mãos, o seu backend pode mandá-la para uma Zebra por um socket TCP (porta 9100 nas impressoras de rede), pela API em localhost do auxiliar Browser Print ou por qualquer servidor de impressão Zebra.

O exemplo mais simples, uma ZD621 conectada à rede em 192.168.1.50:

# Python
import socket
zpl = "^XA^FO50,50^A0N,36,36^FDHello^FS^XZ"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("192.168.1.50", 9100))
s.send(zpl.encode("utf-8"))
s.close()

Esse é o padrão inteiro. Em qualquer linguagem: abra um socket TCP para o IP da impressora na porta 9100, escreva os bytes do ZPL e feche. A impressora dispara assim que vê o ^XZ.

A lista curta para bater o olho num ZPL

Se você está lendo um ZPL que outra pessoa gerou, de um desenvolvedor anterior ou de um sistema que você herdou, estes são os que você vai encontrar:

ZPL num relance

  • ^XA … ^XZ envolve toda etiqueta.
  • ^FO x,y posiciona o próximo campo.
  • ^A0N,h,w escolhe a fonte e o tamanho.
  • ^FD … ^FS guarda e fecha os dados de um campo.
  • ^BC é Code 128, e ^BQ é QR.
  • ^GFA embute um bitmap.
  • ^PQ é quantidade, ^MD é escurecimento e ^PR é velocidade.

Todo o resto é uma variação desses, ou um comando específico para coisas como gravação RFID, consultas de status ou configuração da impressora. A referência oficial do ZPL II, um PDF grátis da Zebra, traz a versão completa se você precisar.

Resumindo

O ZPL é uma linguagem de comandos pequena, em ASCII simples, que existe desde os anos 1990 e não dá sinal de que vai sumir.

Você não precisa escrever ZPL. O editor cuida das peculiaridades (conversão de DPI, rasterização de fontes, codificação de códigos de barras, empacotamento do bitmap) e manda uma string ^XA … ^XZ limpa para a sua impressora.

Você não precisa escrever ZPL, mas saber o que tem na string faz você depurar melhor.

Também ajuda quando você conecta um backend, ou quando alguém pergunta o que o software de etiquetas está fazendo de fato.

Perguntas sobre este tutorial de ZPL

Quais são os comandos ZPL básicos?

^XA começa uma etiqueta e ^XZ termina. ^FO define onde vai o próximo campo, ^A0 escolhe a fonte e o tamanho, ^FD guarda os dados e ^FS fecha o campo. ^BC é um código de barras Code 128 e ^BQ é um QR code.

Por que o mesmo ZPL imprime diferente em outra Zebra?

O ZPL conta em pontos, não em polegadas. Uma impressora de 203 DPI tem 203 pontos por polegada e uma de 600 DPI tem 600, então as mesmas coordenadas caem em outro lugar. Combine o DPI com a impressora.

Preciso aprender ZPL para imprimir numa Zebra?

Não. O criador de etiquetas grátis escreve o ZPL de tudo o que você criar. Saber o básico ajuda quando você depura uma etiqueta ou manda ZPL a partir de um backend.

Como copio o ZPL do mylabelmaker?

Crie a etiqueta e clique em Options e depois em Copy ZPL. A string completa, de ^XA a ^XZ, da etiqueta atual vai para a área de transferência. Com uma planilha carregada, ele copia a linha atual.

Como vejo uma prévia do ZPL antes de imprimir?

Cole o código no visualizador ZPL grátis e ele mostra uma imagem da etiqueta no navegador. Sem cadastro.

Pule o ZPL e crie a etiqueta

Desenhe a etiqueta no editor e imprima. O ZPL é escrito para você, e você pode copiá-lo sempre que precisar. Sem cadastro.

Abrir o criador de etiquetas grátis