Como ler uma linha de ZPL
Uma etiqueta começa em ^XA e termina em ^XZ. No meio, toda instrução começa com um acento circunflexo e duas letras, seguidas de argumentos separados por vírgula em ordem fixa — não existe nome de argumento, então a posição é tudo, e uma vírgula com nada entre ela e a próxima significa “mantenha o padrão”.
Pegue ^FO50,120^A0N,40,40^FDACME Ltda^FS. Isso é: coloque o próximo campo a 50 pontos da esquerda e 120 do topo; use a fonte 0, sem rotação, com 40 pontos de altura e 40 de largura; o conteúdo é “ACME Ltda”; fim do campo. Quatro comandos, uma linha da etiqueta.
Dois detalhes causam a maior parte da confusão. Tudo é medido em pontos da impressora e não em milímetros, então o mesmo arquivo tem tamanho físico diferente a 203 e a 300 dpi — que é o motivo de o seletor de densidade importar tanto. E o ^FS não é enfeite opcional: sem ele, o comando seguinte é lido como mais dados do campo anterior, que é por que uma etiqueta quebrada quase sempre sai como uma única linha de texto emendada.
Por que todo comando aqui vem com um exemplo
Porque a referência de um renderizador deveria ser verificável contra esse renderizador. Cada exemplo abaixo passa pela engine deste site dentro de um teste, e o resultado é comparado com a coluna de suporte — então um comando descrito como renderizado que a engine ignorasse em silêncio quebraria o nosso build em vez de queimar a sua tarde.
É também por isso que os comandos que não implementamos estão listados em vez de omitidos. Uma tabela de suporte que só mostra os acertos não diz nada sobre a etiqueta que está na sua frente; saber que o ^BZ vai avisar e pular é justamente a metade útil.