Referencia ZPL: Lenguaje de Programación, Fuentes y Formato
El manual completo de Zebra Programming Language — anatomía, comandos, fuentes, códigos de barras y ejemplos listos para copiar y pegar en envíos, retail y logística.
TL;DR
ZPL (Zebra Programming Language) es el estándar de facto para impresión de etiquetas térmicas desde los años 80. Toda etiqueta empieza con ^XA y termina con ^XZ. Los comandos con ^ van dentro del formato; los comandos con ~ configuran la impresora. Las coordenadas se expresan en dots (203 dpi = 8 dots/mm, 300 dpi = 12 dots/mm). Las fuentes integradas 0 y A–H cubren la mayoría de casos — la Fuente 0 es totalmente escalable. Los códigos de barras más usados son ^BC (Code 128) para envíos, ^BQ (QR) para tracking y ^BE (EAN-13) para retail. Define la posición del campo con ^FO, escribe el dato con ^FD y cierra cada campo con ^FS. Usa ^CI28 para habilitar UTF-8 y caracteres internacionales.
Prueba nuestras herramientas ZPL gratuitas ahora
Gratis, sin registro — Resultados instantáneos
¿Qué es ZPL (Zebra Programming Language)?
ZPL son las siglas de Zebra Programming Language, un lenguaje de descripción de página creado por Zebra Technologies en la década de 1980 para controlar impresoras térmicas de etiquetas. Es el estándar de la industria para etiquetas de envío, identificación de almacén, tags de precio en retail y empaque farmacéutico porque es compacto, determinístico y compatible con todos los modelos de impresora Zebra (ZD, ZT, ZE, ZQ, GK, GX, ZM y las antiguas 105SL/110XiIII).
Un programa ZPL es un flujo de texto plano de comandos que la impresora interpreta línea por línea. Cada comando empieza con un carácter de control — ^ (caret) para comandos de formato o ~ (tilde) para comandos de configuración — seguido de un código de dos caracteres y parámetros opcionales separados por comas. ZPL II, la revisión actual, añade gráficos, fuentes descargables, campos fijos y serializados, etiquetas multi-formato y comunicación bidireccional. El mismo código imprime el mismo resultado en cualquier impresora Zebra, lo que convierte a ZPL en la lingua franca de la producción de etiquetas en todo el mundo.
Anatomía del formato ZPL
Cada etiqueta imprimible es un bloque autocontenido llamado formato. El formato abre con ^XA, contiene uno o más campos y cierra con ^XZ. Dentro del bloque importa el orden: la impresora aplica los comandos secuencialmente como estado. Un campo — texto, código de barras o gráfico — se define con un comando de posición (^FO o ^FT), un comando de contenido (^A, ^BC, ^GB, etc.) y un separador (^FS). Lo que esté fuera de ^XA..^XZ se trata como configuración de impresora y se ejecuta inmediatamente.
- Toda etiqueta empieza con ^XA y termina con ^XZ. Lo que esté fuera es configuración, no contenido imprimible.
- Los comandos que empiezan con ^ son comandos de formato y viven dentro del bloque ^XA..^XZ.
- Los comandos que empiezan con ~ son comandos de control que configuran la impresora y pueden enviarse de forma independiente (ej.: ~JR reinicia la impresora).
- Cada campo imprimible debe cerrarse con ^FS (separador de campo). Olvidar ^FS es la causa más común de salida corrupta.
- Los parámetros se separan por comas y son posicionales. Los parámetros faltantes toman el valor por defecto de la impresora o el último valor establecido.
- Usa ^CI28 dentro del formato para habilitar UTF-8 y caracteres no ASCII (acentos, ñ, ç, é, ü, chino, cirílico).
- Los comandos son sensibles a mayúsculas. ^FO y ^fo no son lo mismo — siempre en mayúsculas.
- Los espacios en blanco y saltos de línea entre comandos se ignoran, así que puedes formatear tu ZPL para que sea legible.
^XA ; Inicio del formato
^CI28 ; Habilita UTF-8
^CF0,40 ; Fuente 0 por defecto, tamaño 40
^FO50,50 ; Posición X=50, Y=50
^FDHola ZPL Mundo^FS ; Imprime texto, cierra campo
^FO50,120^BY3 ; Nuevo campo + ancho del barcode
^BCN,100,Y,N,N ; Code 128, 100 dots de altura
^FD1234567890^FS ; Datos del barcode, cierra campo
^XZ ; Fin del formato → imprime la etiquetaSistema de coordenadas y DPI
ZPL posiciona cada elemento usando coordenadas en dots medidas desde la esquina superior izquierda de la etiqueta. La conversión entre milímetros o pulgadas y dots depende de la densidad de impresión (DPI). Conocer el conteo exacto de dots de tu etiqueta es esencial para alineación perfecta, especialmente con formularios pre-impresos y transportistas como FedEx, UPS o Mercado Libre que exigen dimensiones de etiqueta estrictas.
- Impresoras de 203 dpi: 8 dots por mm (203 dots por pulgada). Una etiqueta de 4×6 pulgadas = 812×1218 dots.
- Impresoras de 300 dpi: 12 dots por mm (300 dots por pulgada). La misma etiqueta de 4×6 = 1200×1800 dots.
- Impresoras de 600 dpi: 24 dots por mm. Usadas principalmente para tags de joyería y retail ultra-finos.
- ^FO x,y posiciona un campo por la esquina superior izquierda de su bounding box.
- ^FT x,y posiciona un campo por la línea base del texto — útil cuando se mezclan tamaños de fuente.
- Y crece hacia abajo. ^FO0,0 es la esquina superior izquierda; ^FO0,1218 es el fondo de una etiqueta de 6 pulgadas a 203 dpi.
- Siempre prueba al 100% de escala; las herramientas de render pueden redimensionar el preview pero la impresora aplica las coordenadas literalmente.
Guía de programación ZPL: de Hola Mundo a una etiqueta de envío
Tres ejemplos progresivamente más completos. Pega cada uno en el visor ZPL para ver exactamente qué sale por la impresora.
Paso 1 — Hola Mundo
El programa ZPL válido más pequeño posible. Abre un formato, imprime un solo campo de texto en (50,50) usando la Fuente 0 escalable por defecto a 40 dots de alto y cierra el formato.
^XA
^CF0,40
^FO50,50^FDHola ZPL^FS
^XZPaso 2 — Texto + código de barras Code 128
Añade un código de barras Code 128 (^BC), el estándar para etiquetas de envío. ^BY define el ancho del módulo antes de declarar el barcode. El barcode renderiza los dígitos legibles debajo gracias al flag Y.
^XA
^CF0,40
^FO50,50^FDPedido #1042^FS
^FO50,120^BY3
^BCN,100,Y,N,N
^FD1234567890^FS
^XZPaso 3 — Etiqueta de envío completa
Combina texto variable, un bloque de dirección multi-línea, un código QR y un barcode Code 128 de tracking — la estructura de una etiqueta de envío real de e-commerce.
^XA
^CI28
^CF0,32
^FO40,40^FDEnviar a:^FS
^FO40,90^FB540,4,0,L,0^FDJuana Pérez\&Calle Mayor 123\&Madrid, 28013\&España^FS
^FO40,260^FDPedido #A-7782^FS
^FO40,310^BY3^BCN,90,Y,N,N^FD1Z999AA10123456784^FS
^FO450,260^BQN,2,5^FDQA,https://example.com/track/A-7782^FS
^XZReferencia de comandos ZPL
Los comandos ZPL II más usados agrupados por propósito. Para cada comando listamos una descripción breve, un ejemplo que puedes pegar en un visor y el significado de los parámetros.
Formato y control
| Comando | Descripción | Ejemplo | Parámetros |
|---|---|---|---|
| ^XA | Inicio del formato de etiqueta. Obligatorio al principio de toda etiqueta imprimible. | ^XA ... ^XZ | Ninguno |
| ^XZ | Fin del formato de etiqueta. Envía la etiqueta a la cola de impresión. | ^XA^FO50,50^FDHola^FS^XZ | Ninguno |
| ^FS | Separador de campo. Cierra el campo actual. Obligatorio tras cada elemento imprimible. | ^FO50,50^FDTexto^FS | Ninguno |
| ^CI | Cambia el set de caracteres internacional. ^CI28 habilita UTF-8 para acentos y scripts no latinos. | ^CI28 | 28 = UTF-8, 13 = Latin-1 |
| ^CF | Fuente, altura y ancho por defecto para toda la etiqueta. Evita repetir ^A en cada campo. | ^CF0,30,30 | fuente,alto,ancho |
| ^LH | Label Home — desplaza el origen (0,0) de todas las coordenadas. | ^LH30,30 | x,y en dots |
| ^PQ | Cantidad de impresión. Imprime la misma etiqueta N veces tras ^XZ. | ^PQ5,0,0,N | qty,pausa,replicar,override |
| ~JR | Reset de impresora. Se envía fuera de un formato; la impresora reinicia. | ~JR | Ninguno |
Posicionamiento y texto
| Comando | Descripción | Ejemplo | Parámetros |
|---|---|---|---|
| ^FO | Origen del campo — posiciona el siguiente campo por su esquina superior izquierda. | ^FO50,80 | x,y en dots |
| ^FT | Field Typeset — posiciona el siguiente campo por la línea base del texto. Ideal para tamaños mixtos. | ^FT50,80 | x,y en dots |
| ^A | Selección de fuente para el siguiente campo. Sobrescribe ^CF localmente. | ^A0N,40,40 | fuente,orientación,alto,ancho |
| ^FD | Datos del campo. El texto o valor numérico literal a imprimir. | ^FDPedido #42^FS | texto (hasta 3072 chars) |
| ^FB | Bloque de campo — texto multi-línea con wrap y alineación. | ^FB400,3,0,L,0^FD…^FS | ancho,maxLíneas,interlínea,alineación,sangría |
| ^FN | Número de campo — placeholder de template rellenado después con datos ^FN. | ^FN1^FS | 1–999 |
| ^SN | Número serial — auto-incrementa entre copias de un mismo job. | ^SN001,1,Y | inicio,incremento,relleno-ceros |
Códigos de barras
| Comando | Descripción | Ejemplo | Parámetros |
|---|---|---|---|
| ^BY | Ancho de módulo y ratio por defecto. Debe ir ANTES del comando de barcode. | ^BY3,3,100 | anchoMódulo,ratio,alto |
| ^BC | Code 128 — el estándar en envíos y logística. | ^BCN,100,Y,N,N | orientación,alto,línea-debajo,línea-arriba,checkDigit |
| ^BQ | QR Code — URLs, JSON, IDs de tracking. Hasta 7089 chars numéricos. | ^BQN,2,5 | orientación,modelo,magnificación |
| ^BE | EAN-13 — código de producto retail global (13 dígitos). | ^BEN,100,Y,N | orientación,alto,línea-debajo,línea-arriba |
| ^BU | UPC-A — código de producto retail norteamericano (12 dígitos). | ^BUN,100,Y,N | orientación,alto,línea-debajo,línea-arriba |
| ^BX | Data Matrix — código 2D de alta densidad para artículos pequeños y farma. | ^BXN,200,200 | orientación,alto,calidad |
| ^B0 | Aztec — código 2D usado en tickets de transporte y SmartCard. | ^B0N,7,N,0,N | orientación,magnificación(1-10),ECI(Y/N),errorControl(0-300),menú(Y/N) |
| ^B7 | PDF417 — barcode 2D apilado usado en carnets de conducir y envíos. | ^B7N,8,5,10,30,N | orientación,altoFila,seguridad(0-8),cols(1-30),filas(3-90),truncar(Y/N) |
Gráficos
| Comando | Descripción | Ejemplo | Parámetros |
|---|---|---|---|
| ^GB | Caja gráfica — rectángulos, bordes, separadores. | ^GB300,2,2,B^FS | ancho,alto,grosor,color |
| ^GC | Círculo gráfico. | ^GC100,3,B^FS | diámetro,grosor,color |
| ^GD | Línea diagonal. | ^GD200,200,2,B,R^FS | ancho,alto,grosor,color,orientación |
| ^GF | Campo gráfico — bitmap embebido (ASCII o comprimido). | ^GFA,1024,1024,32,… | formato,bytes,total,bytesPorFila,datos |
| ^FR | Field Reverse — invierte negro/blanco dentro del campo. | ^FO50,50^FR^GB100,30,30^FS | Ninguno |
Fuentes ZPL: integradas y escalables
Las impresoras Zebra incluyen un set fijo de fuentes bitmap (A a H) más una fuente totalmente escalable (0). La Fuente 0 es la única que puede ajustarse a cualquier alto y ancho con ^CF o ^A; las bitmap tienen tamaños fijos que pueden estirarse pero no redibujarse limpiamente. El comando ^A selecciona fuente + tamaño para un solo campo; ^CF fija el valor por defecto para toda la etiqueta.
| Código | Nombre | Tamaño | Notas |
|---|---|---|---|
| 0 | Fuente 0 (CG Triumvirate) | Escalable, cualquier alto/ancho | Fuente escalable por defecto. Ideal para precios, títulos, contenido dinámico. |
| A | Fuente A | 9 × 5 dots (fija) | La bitmap más pequeña. Para letra fina y etiquetas densas. |
| B | Fuente B | 11 × 7 dots (fija) | Algo mayor que A. Habitual en líneas de detalle. |
| C / D | Fuente C, D | 18 × 10 dots (fija) | Bitmaps de tamaño medio para campos variables. |
| E | Fuente E | 28 × 15 dots (OCR-B) | Compatible con OCR. |
| F | Fuente F | 26 × 13 dots | Bitmap mayor de uso general. |
| G | Fuente G | 60 × 40 dots | Tamaño display, para cabeceras. |
| H | Fuente H (OCR-A) | 21 × 13 dots | Estándar OCR-A, pensada para lectura por máquina. |
| P–V | Fuentes soft P–V | Variable | Letras P, Q, R, S, T, U, V — fuentes bitmap heredadas en firmware antiguo. |
^XA
^CF0,50,50 ; Fuente 0 por defecto a 50x50
^FO50,50^FDPrecio: $19.99^FS
^FO50,120^ABN,30,15 ; Fuente B explícita
^FDSKU: ABC-001^FS
^FO50,170^A0N,80,80 ; Fuente 0 grande inline
^FDOFERTA^FS
^XZCódigos de barras en ZPL
ZPL renderiza nativamente todas las simbologías 1D y 2D comunes. Declara siempre ^BY (ancho de módulo y ratio) antes del comando de barcode para mantener felices a los escáneres.
Code 128
^BCEnvíos, logística, tracking de paquetes. Números + letras. Default de FedEx, UPS, USPS.
^FO50,50^BY3^BCN,100,Y,N,N^FD1234567890^FSQR Code
^BQURLs, payloads JSON, IDs de tracking. Hasta 7089 chars numéricos. Lectores ubicuos.
^FO50,50^BQN,2,6^FDQA,https://zplpdf.com^FSEAN-13
^BEProductos retail a nivel mundial. Exactamente 12 dígitos — el 13º es checksum automático.
^FO50,50^BY2^BEN,100,Y,N^FD750123456789^FSUPC-A
^BURetail norteamericano. 11 dígitos + checksum automático.
^FO50,50^BY2^BUN,100,Y,N^FD01234567890^FSData Matrix
^BXUDI farmacéutico, electrónica, artículos muy pequeños. Lee en cualquier ángulo.
^FO50,50^BXN,200,200^FDPharmaCode-42^FSAztec
^B0Tickets de transporte, tarjetas de embarque. Compacto, no requiere zona de silencio.
^FO50,50^B0N,7,N,0,N^FDBOARDING-A14^FSPDF417
^B7Carnets de conducir, tarjetas ID, envíos. Apilado 2D, hasta ~1.1 KB.
^FO50,50^B7N,8,5,10,30,N^FDLastName/FirstName/DOB^FSCode 39
^B3Inventario interno, etiquetas de activos. Alfanumérico pero menos denso que Code 128.
^FO50,50^BY3^B3N,N,100,Y,N^FDASSET-001^FSEjemplos ZPL completos (copiar y pegar)
Programas funcionales listos para soltar en el visor ZPLPDF. Cada ejemplo es un bloque ^XA..^XZ probado a 203 dpi en etiqueta de 4×6 pulgadas.
Etiqueta de envío — paquete e-commerce
Remitente, destinatario, barcode Code 128 de tracking y QR para URL de seguimiento.
^XA
^CI28
^PW812
^LL1218
^CF0,28
^FO40,40^FDDE:^FS
^FO40,80^FB400,3,0,L,0^FDZPLPDF Bodega\&Calle Logística 500\&Miami, FL 33101^FS
^FO40,210^FDPARA:^FS
^FO40,250^A0N,38,38^FB500,4,0,L,0^FDJuana Pérez\&Calle Mayor 123, 4ºB\&Madrid, 28013\&España^FS
^FO40,520^GB720,2,2,B^FS
^FO40,540^FDSeguimiento:^FS
^FO40,580^BY3^BCN,110,Y,N,N^FD1Z999AA10123456784^FS
^FO520,540^BQN,2,6^FDQA,https://zplpdf.com/track/1Z999AA10123456784^FS
^FO40,820^FDPedido #A-7782^FS
^FO40,860^FD2026-05-21^FS
^XZTag de precio retail con EAN-13
Nombre del producto, SKU, barcode EAN-13 y precio destacado con caja de reverse-print.
^XA
^CI28
^CF0,40
^FO40,30^A0N,50,50^FDCafé Orgánico 250g^FS
^FO40,100^FDSKU: COF-ORG-250^FS
^FO40,150^BY2^BEN,100,Y,N^FD750123456789^FS
^FO40,290^GB300,80,80,B^FS
^FO50,300^FR^A0N,60,60^FD$ 12.99^FS
^XZEtiqueta farmacia con Data Matrix (GS1)
Nombre del fármaco, lote y caducidad con Data Matrix llevando identificadores de aplicación GS1 — habitual en cadena de suministro farmacéutico.
^XA
^CI28
^CF0,32
^FO40,40^A0N,44,44^FDParacetamol 500 mg^FS
^FO40,100^FDLote: B25C-0481^FS
^FO40,150^FDCad: 2027-09^FS
^FO40,200^BXN,200,200^FD>;(01)07640123456789(17)270930(10)B25C-0481^FS
^XZLote serializado — 50 etiquetas únicas
^PQ50 imprime 50 copias; ^SN auto-incrementa el número serial en cada una.
^XA
^CF0,40
^FO50,50^FDLote SN^FS
^FO50,120^A0N,80,80^SN0001,1,Y^FS
^PQ50,0,0,N
^XZErrores comunes en ZPL y cómo corregirlos
La etiqueta sale en blanco o se salta papel.
→ Falta ^XZ al final o hay bytes extra entre ^XA y ^XZ.
✓ Asegura que el formato empiece con ^XA, termine con ^XZ y que ningún carácter rompa el flujo.
El texto muestra ? en vez de acentos (á, é, ñ).
→ La codificación por defecto es CP-850 y no acarrea bytes UTF-8.
✓ Añade ^CI28 justo después de ^XA para pasar la impresora a UTF-8.
El barcode imprime pero el escáner no lo lee.
→ Ancho de módulo demasiado pequeño o ratio fuera de spec.
✓ Pon ^BY3,3,100 antes del barcode y deja zonas de silencio alrededor.
El campo aparece en posición incorrecta.
→ Mezclar ^FO y ^FT — usan distintos puntos de referencia.
✓ Elige uno: ^FO (esquina superior izquierda) o ^FT (línea base). No alternes dentro de la misma etiqueta.
El texto multi-línea se sale del borde.
→ ^FD no hace wrap si no lo envuelves en ^FB.
✓ Envuelve el texto multi-línea en ^FBancho,maxLíneas,interlínea,alineación,sangría antes de ^FD.
La imagen (^GF) imprime corrupta.
→ El conteo de bytes o bytes-por-fila no coincide con la longitud de los datos.
✓ Re-codifica la imagen con una herramienta conocida — bytesPorFila debe ser ceil(ancho/8).
Referencia ZPL — Preguntas frecuentes
¿Para qué se usa ZPL?
¿Es ZPL lo mismo que Zebra Programming Language?
¿Cómo aprendo ZPL rápido?
¿Qué comando ZPL define la fuente?
¿Cómo añado un código QR en ZPL?
¿Cómo imprimo un código de barras Code 128?
¿Cuál es la diferencia entre ^FO y ^FT?
¿Cuántos DPI tiene mi impresora Zebra?
¿Puedo probar ZPL sin impresora?
¿Es ZPL lo mismo que EPL?
Prueba tu ZPL ahora mismo
Pega cualquiera de los ejemplos de esta página en nuestro visor ZPL gratuito online para ver exactamente qué imprimirá tu equipo — sin registro, sin descarga.