Menu
Manual completo ZPL II

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 etiqueta

Sistema 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.

1

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
^XZ
2

Paso 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
^XZ
3

Paso 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
^XZ

Referencia 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

ComandoDescripciónEjemploParámetros
^XAInicio del formato de etiqueta. Obligatorio al principio de toda etiqueta imprimible.^XA ... ^XZNinguno
^XZFin del formato de etiqueta. Envía la etiqueta a la cola de impresión.^XA^FO50,50^FDHola^FS^XZNinguno
^FSSeparador de campo. Cierra el campo actual. Obligatorio tras cada elemento imprimible.^FO50,50^FDTexto^FSNinguno
^CICambia el set de caracteres internacional. ^CI28 habilita UTF-8 para acentos y scripts no latinos.^CI2828 = UTF-8, 13 = Latin-1
^CFFuente, altura y ancho por defecto para toda la etiqueta. Evita repetir ^A en cada campo.^CF0,30,30fuente,alto,ancho
^LHLabel Home — desplaza el origen (0,0) de todas las coordenadas.^LH30,30x,y en dots
^PQCantidad de impresión. Imprime la misma etiqueta N veces tras ^XZ.^PQ5,0,0,Nqty,pausa,replicar,override
~JRReset de impresora. Se envía fuera de un formato; la impresora reinicia.~JRNinguno

Posicionamiento y texto

ComandoDescripciónEjemploParámetros
^FOOrigen del campo — posiciona el siguiente campo por su esquina superior izquierda.^FO50,80x,y en dots
^FTField Typeset — posiciona el siguiente campo por la línea base del texto. Ideal para tamaños mixtos.^FT50,80x,y en dots
^ASelección de fuente para el siguiente campo. Sobrescribe ^CF localmente.^A0N,40,40fuente,orientación,alto,ancho
^FDDatos del campo. El texto o valor numérico literal a imprimir.^FDPedido #42^FStexto (hasta 3072 chars)
^FBBloque de campo — texto multi-línea con wrap y alineación.^FB400,3,0,L,0^FD…^FSancho,maxLíneas,interlínea,alineación,sangría
^FNNúmero de campo — placeholder de template rellenado después con datos ^FN.^FN1^FS1–999
^SNNúmero serial — auto-incrementa entre copias de un mismo job.^SN001,1,Yinicio,incremento,relleno-ceros

Códigos de barras

ComandoDescripciónEjemploParámetros
^BYAncho de módulo y ratio por defecto. Debe ir ANTES del comando de barcode.^BY3,3,100anchoMódulo,ratio,alto
^BCCode 128 — el estándar en envíos y logística.^BCN,100,Y,N,Norientación,alto,línea-debajo,línea-arriba,checkDigit
^BQQR Code — URLs, JSON, IDs de tracking. Hasta 7089 chars numéricos.^BQN,2,5orientación,modelo,magnificación
^BEEAN-13 — código de producto retail global (13 dígitos).^BEN,100,Y,Norientación,alto,línea-debajo,línea-arriba
^BUUPC-A — código de producto retail norteamericano (12 dígitos).^BUN,100,Y,Norientación,alto,línea-debajo,línea-arriba
^BXData Matrix — código 2D de alta densidad para artículos pequeños y farma.^BXN,200,200orientación,alto,calidad
^B0Aztec — código 2D usado en tickets de transporte y SmartCard.^B0N,7,N,0,Norientación,magnificación(1-10),ECI(Y/N),errorControl(0-300),menú(Y/N)
^B7PDF417 — barcode 2D apilado usado en carnets de conducir y envíos.^B7N,8,5,10,30,Norientación,altoFila,seguridad(0-8),cols(1-30),filas(3-90),truncar(Y/N)

Gráficos

ComandoDescripciónEjemploParámetros
^GBCaja gráfica — rectángulos, bordes, separadores.^GB300,2,2,B^FSancho,alto,grosor,color
^GCCírculo gráfico.^GC100,3,B^FSdiámetro,grosor,color
^GDLínea diagonal.^GD200,200,2,B,R^FSancho,alto,grosor,color,orientación
^GFCampo gráfico — bitmap embebido (ASCII o comprimido).^GFA,1024,1024,32,…formato,bytes,total,bytesPorFila,datos
^FRField Reverse — invierte negro/blanco dentro del campo.^FO50,50^FR^GB100,30,30^FSNinguno

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ódigoNombreTamañoNotas
0Fuente 0 (CG Triumvirate)Escalable, cualquier alto/anchoFuente escalable por defecto. Ideal para precios, títulos, contenido dinámico.
AFuente A9 × 5 dots (fija)La bitmap más pequeña. Para letra fina y etiquetas densas.
BFuente B11 × 7 dots (fija)Algo mayor que A. Habitual en líneas de detalle.
C / DFuente C, D18 × 10 dots (fija)Bitmaps de tamaño medio para campos variables.
EFuente E28 × 15 dots (OCR-B)Compatible con OCR.
FFuente F26 × 13 dotsBitmap mayor de uso general.
GFuente G60 × 40 dotsTamaño display, para cabeceras.
HFuente H (OCR-A)21 × 13 dotsEstándar OCR-A, pensada para lectura por máquina.
P–VFuentes soft P–VVariableLetras 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
^XZ

Có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

^BC

Envíos, logística, tracking de paquetes. Números + letras. Default de FedEx, UPS, USPS.

^FO50,50^BY3^BCN,100,Y,N,N^FD1234567890^FS

QR Code

^BQ

URLs, payloads JSON, IDs de tracking. Hasta 7089 chars numéricos. Lectores ubicuos.

^FO50,50^BQN,2,6^FDQA,https://zplpdf.com^FS

EAN-13

^BE

Productos retail a nivel mundial. Exactamente 12 dígitos — el 13º es checksum automático.

^FO50,50^BY2^BEN,100,Y,N^FD750123456789^FS

UPC-A

^BU

Retail norteamericano. 11 dígitos + checksum automático.

^FO50,50^BY2^BUN,100,Y,N^FD01234567890^FS

Data Matrix

^BX

UDI farmacéutico, electrónica, artículos muy pequeños. Lee en cualquier ángulo.

^FO50,50^BXN,200,200^FDPharmaCode-42^FS

Aztec

^B0

Tickets de transporte, tarjetas de embarque. Compacto, no requiere zona de silencio.

^FO50,50^B0N,7,N,0,N^FDBOARDING-A14^FS

PDF417

^B7

Carnets de conducir, tarjetas ID, envíos. Apilado 2D, hasta ~1.1 KB.

^FO50,50^B7N,8,5,10,30,N^FDLastName/FirstName/DOB^FS

Code 39

^B3

Inventario interno, etiquetas de activos. Alfanumérico pero menos denso que Code 128.

^FO50,50^BY3^B3N,N,100,Y,N^FDASSET-001^FS

Ejemplos 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
^XZ

Tag 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
^XZ

Etiqueta 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
^XZ

Lote 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
^XZ

Errores 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?

ZPL es el lenguaje que interpretan las impresoras térmicas Zebra para producir etiquetas. Es el estándar de facto en etiquetas de envío (FedEx, UPS, USPS), tags de precio en retail, etiquetas UDI farmacéuticas, identificación de almacén y cualquier escenario de impresión de etiquetas a alto volumen.

¿Es ZPL lo mismo que Zebra Programming Language?

Sí. ZPL es el acrónimo de Zebra Programming Language. La revisión actual es ZPL II, usada por toda impresora Zebra moderna.

¿Cómo aprendo ZPL rápido?

Empieza por la guía de tres pasos de esta página (Hola Mundo → barcode → etiqueta de envío), pega cada ejemplo en el visor ZPL para ver el resultado inmediato y consulta la tabla de comandos cuando necesites una nueva funcionalidad. La mayoría de las etiquetas en producción usan menos de 15 comandos.

¿Qué comando ZPL define la fuente?

Usa ^CF fuente,alto,ancho para definir la fuente por defecto de toda la etiqueta, o ^A fuente,orientación,alto,ancho antes de un ^FD concreto para sobrescribirla en un campo. La Fuente 0 es la única escalable; A a H son bitmaps fijas.

¿Cómo añado un código QR en ZPL?

Usa ^BQN,2,magnificación antes de ^FD. El payload debe empezar con QA, (auto-corrección, alfanumérico). Ejemplo: ^FO50,50^BQN,2,6^FDQA,https://example.com^FS.

¿Cómo imprimo un código de barras Code 128?

Declara el ancho del módulo con ^BY (ej.: ^BY3), después ^BCN,alto,Y,N,N para orientación N (normal), línea legible debajo = Y. Sigue con ^FD<dígitos>^FS.

¿Cuál es la diferencia entre ^FO y ^FT?

^FO (Field Origin) posiciona el campo por la esquina superior izquierda del bounding box. ^FT (Field Typeset) lo posiciona por la línea base del texto. ^FT es útil al mezclar tamaños de fuente porque la línea base se mantiene alineada aunque cambien los altos.

¿Cuántos DPI tiene mi impresora Zebra?

La mayoría de impresoras de escritorio e industriales Zebra son de 203 dpi (8 dots/mm). Modelos de mayor resolución (ZT411, ZT421, ZD621) vienen en 300 dpi (12 dots/mm) y una pequeña gama a 600 dpi. Multiplica los mm por 8, 12 o 24 para obtener los dots de tu modelo.

¿Puedo probar ZPL sin impresora?

Sí — pega tu código ZPL en nuestro visor ZPL gratuito online para ver un preview exacto, valida la sintaxis con el validador ZPL o exporta a PDF para revisión y compartir.

¿Es ZPL lo mismo que EPL?

No. EPL (Eltron Programming Language) es el precursor más antiguo y simple que Zebra también soporta por compatibilidad. ZPL es más potente y es lo que usa toda impresora Zebra moderna. Mira nuestra comparativa ZPL vs EPL para tips de migración.

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.