Introduction: The positioning and advantages of EPL2
EPL2 (Eltron Programming Language 2) is the core page description language for Zebra desktop printers such as GK420, LP2844, G-Series, etc. Unlike the early line mode (EPL1), EPL2 adopts a "assemble first, print later" mechanism, which can efficiently process text, barcodes, graphics, and QR codes. Its syntax is concise and commands are compact, making it particularly suitable for quickly generating tags in resource constrained embedded environments.
This article is based on the official EPL Programming Guide (document number 14245L-003 Rev. A), which outlines common commands, form storage techniques, variable and counter usage, 2D barcode configuration, network settings (SGD), and common troubleshooting methods for engineers. It helps you quickly locate problems when developing or maintaining Zebra printing applications.
EPL2 Basic Concepts and Command Structure
2.1 Command syntax rules
Each EPL2 command starts with one or two case sensitive letters, followed by parameters (separated by commas), and ends with a line break (LF, ASCII 10). The carriage return (CR) will be ignored. The optional parts in the parameters are represented by square brackets, and the fixed data is enclosed in double quotation marks.
Example: A50,50,0,1,1,1, N, "Hello" - Print "Hello" at coordinates (50,50) using font 1, in normal orientation, without highlighting.
2.2 Image Buffer and Coordinate System
EPL2 uses a dot matrix coordinate system, with the origin (0,0) located in the upper left corner. The X-axis represents width, and the Y-axis represents height. All drawing commands (text, barcode, lines, boxes) are based on this coordinate system. Before printing, the image buffer must be cleared using the N command.
2.3 Media and Printing Control
Set label width (dots): q416 represents a width of 416 dots.
Q sets the label length and gap: Q160,24 represents 160 point labels+24 point gaps.
S sets the printing speed: S2 corresponds to 2 ips (inches/second), the specific value varies depending on the model.
D Set printing density: D5 range 0-15 (0 is shallowest, 15 is deepest).
P printing label: P1 prints one set, P2, Print 2 sets, with 3 copies per set.
Detailed explanation and practical skills of core commands
3.1 Text Printing - A Command
Command syntax: A p1, p2, p3, p4, p5, p6, p7, "DATA"
P1, p2: Starting coordinates (points)
P3: Rotation (0/1/2/3=0 °/90 °/180 °/270 °)
P4: Font selection (1-5 are built-in equal width Latin fonts; 8-9 are Asian double byte fonts; A-Z are soft fonts)
P5, p6: Horizontal/vertical magnification (1-6, 8, and 1-9)
P7: Normal (N) or reversed (R)
Tip: It is recommended to use the LE (Line Draw Exclusive OR) command to draw white text on a black background instead of the R parameter of the A command for more precise border control.
3.2 One Dimensional Barcode - B Command
The B command supports Code 39, Code 128, EAN/UPC, Interlocked 2 of 5, Codabar, Postnet, Planet, and more. The parameters include narrow bar width, wide bar width, barcode height, and whether to print readable characters.
Common problem: Barcode scanner cannot read barcodes in the "ladder" direction (rotated 90 °/270 °). Suggest using the "fence" direction (0 °/180 °) as much as possible. If rotating barcodes must be used, automatic optimization can be disabled through the oB command (but this may cause some scanners to fail to read, and Zebra does not guarantee compatibility).
Code 128 functional characters: Supports FNC1 – FNC4, automatically processes extended ASCII. For 5 or more consecutive extended characters, the printer automatically locks into extended mode; If there are less than 5, use the shift method.
3.3 Graphic Storage and Printing - GM/GG
GM "NAME" size: Download PCX format graphics to memory, size is in bytes. Binary data follows closely behind.
GG x, y, "NAME": Print stored graphics.
GW x, y, width, height, data: Directly write the original bitmap data into the image buffer (without storage).
Operation suggestion: Use DOS COPY/b command or Zebra Firmware Downloader to send graphic files. Do not add extra line breaks after graphic data.
3.4 Tables and Lines
LO x, y, width, height: Draw a black solid rectangle (covering existing content).
LW x, y, width, height: Draw a white rectangle (erase).
LE x, y, width, height: XOR line drawing can be used to invert existing graphics.

Form storage and automation of variables/counters
4.1 Form Concept
EPL2 allows storing complete label designs as "Forms". The form can contain fixed elements, variable fields, and counters, and can be printed by filling in variables each time it is called. This greatly reduces the overhead of duplicate data transmission.
Storage process:
FS "FORMNAME" - Start storing the form.
Define variables (V00,10, N, "Prompt"), counters (C0,5, L,+1, "-"), then add commands such as A/B and reference these variables.
FE - End storage.
Call process:
FR "FORMNAME" - Recall the form from memory.
Command followed by variable values (in defined order).