EPLPrinter Emulator SDK for .NET
Key Features
Preview EPL commands without wasting real labels!
High Quality & Accuracy EPL Rendering
EPL Parsing from Strings, IO Streams & Files
Full Barcodes Support
Print EPL on ZPL printers & any other printer
Zebra and EPL are registered trademarks of ZIH Corp.
EPLPrinter Emulator SDK for .NET
is not made by or endorsed by Zebra.
Convert, Preview & Render EPL commands to PNG, JPG & PDF with C# & VB.NET
EPLPrinter Emulator SDK for .NET allows you to Convert, Preview and Render raw EPL (Zebra/Eltron Programming Language) commands to well known image and document formats like PNG, JPG, PDF, PCX, Zebra GRF ASCII hex, Zebra EPL Binary Graphic, Honeywell-Intermec FingerPrint Binary Graphic, EPSON ESC/POS NV Binary Graphic & HP PCL by writing C# or VB.NET code. It targets .NET Standard 2.0, so it runs on .NET Framework 4.6.1+, .NET Core 2.0+ and modern .NET, as well as Mono, Xamarin and UWP, on Windows, Linux and macOS.
The output can also be printed to any printer: convert EPL to ZPL (GRF) to keep legacy EPL applications working on ZPL-only Zebra printers, or to FingerPrint, ESC/POS, PCL, PNG or PDF for any other printer.
Quick Start: Convert EPL to PDF in C#
- Download the SDK and reference
Neodynamic.SDK.EPLPrinterin your project. - Create an
EPLPrinter(the virtual printer) and set its DPI and label size. The DPI must match the one the EPL was designed for. - Choose the
RenderOutputFormatand callProcessCommands().
Convert an EPL label to PDF
using System.Text;
using Neodynamic.SDK.EPLPrinter;
string epl = "\nN\nq609\nQ203,26\nB26,26,0,UA0,2,2,152,B,\"603679025109\"\nA253,26,0,3,1,1,N,\"SKU 6205518 MFG 6354\"\nA253,56,0,3,1,1,N,\"2XIST TROPICAL BEACH\"\nP1,1\n";
using (var printer = new EPLPrinter("LICENSE OWNER", "LICENSE KEY"))
{
printer.Dpi = 203; // must match the EPL design
printer.AntiAlias = true;
printer.LabelWidth = 3 * printer.Dpi; // q609 = 3 in at 203 dpi
printer.LabelHeight = 1 * printer.Dpi; // Q203 = 1 in
printer.RenderOutputFormat = RenderOutputFormat.PDF;
var output = printer.ProcessCommands(epl, Encoding.UTF8);
if (output != null && output.Count > 0)
File.WriteAllBytes("label.pdf", output[0]);
}
Change RenderOutputFormat.PDF to PNG, JPG, PCX or GRF to get other formats. VB.NET samples are in the documentation.
Convert multiple labels to PNG images
// P3 = print 3 labels
string epl = "\nN\nq609\nQ203,26\nB26,26,0,UA0,2,2,152,B,\"603679025109\"\nA253,26,0,3,1,1,N,\"SKU 6205518 MFG 6354\"\nA253,56,0,3,1,1,N,\"2XIST TROPICAL BEACH\"\nP3\n";
using (var printer = new EPLPrinter("LICENSE OWNER", "LICENSE KEY"))
{
printer.Dpi = 203;
printer.LabelWidth = 3 * printer.Dpi;
printer.LabelHeight = 1 * printer.Dpi;
printer.RenderOutputFormat = RenderOutputFormat.PNG;
var output = printer.ProcessCommands(epl, Encoding.UTF8);
// one byte[] per label for image formats
for (int i = 0; i < output.Count; i++)
File.WriteAllBytes($"label-{i + 1}.png", output[i]);
}
With PDF output, multiple labels become one PDF with one page per label. Try it without installing anything in the online EPL viewer demo.
Print EPL Labels on ZPL Printers & Any Other Printer
Replacing old EPL printers (like the Zebra/Eltron LP/TLP 2844 series) with ZPL-only models, or need EPL labels on a printer that does not speak EPL? EPLPrinter Emulator SDK renders the EPL to the language the target printer understands and sends it directly to the printer, so the application that generates the EPL does not need to change:
| Target printer | Render EPL to | Print method |
|---|---|---|
| Zebra ZPL printers | GRF (ZPL graphic) | PrintRawCommands()with EnablePrinting = true |
| Zebra/Eltron EPL printers (as graphic) | EPL or PCX | |
| Honeywell-Intermec FingerPrint printers | FP | |
| EPSON ESC/POS receipt printers | NV | |
| HP PCL laser printers | PCL | |
| Any printer with a driver on Windows | PNG or JPG | PrintImage() |
| Any CUPS printer on Linux & macOS | PDF | PrintPDF() |
Print an EPL label on a ZPL printer over the network
using Neodynamic.SDK.EPLPrinter;
using Neodynamic.SDK.EPLPrinter.Printing;
using (var printer = new EPLPrinter("LICENSE OWNER", "LICENSE KEY"))
{
printer.Dpi = 203;
printer.LabelWidth = 3 * printer.Dpi;
printer.LabelHeight = 1 * printer.Dpi;
printer.RenderOutputFormat = RenderOutputFormat.GRF; // EPL -> ZPL
printer.EnablePrinting = true;
var output = printer.ProcessCommands(epl, Encoding.UTF8);
using (var pj = new WindowsPrintJob()) // UnixPrintJob on Linux/macOS
{
pj.PrinterSettings = new PrinterSettings();
pj.PrinterSettings.Dpi = 203;
pj.PrinterSettings.Communication.CommunicationType = CommunicationType.Network;
pj.PrinterSettings.Communication.NetworkIPAddress = IPAddress.Parse("192.168.1.50");
pj.PrinterSettings.Communication.NetworkPort = 9100;
pj.PrintRawCommands(output);
}
}
Printer connectivity
- USB or any printer installed through a printer driver
- IP / Ethernet network by IP address or host name (e.g. port 9100)
- Serial port (RS-232): Windows only
- Parallel port (Centronics / LPT): Windows only
Printing classes ship in two assemblies: Neodynamic.SDK.EPLPrinter.WindowsPrinting.dll (WindowsPrintJob) and Neodynamic.SDK.EPLPrinter.UnixPrinting.dll (UnixPrintJob) for Linux & macOS.
Features at a Glance
Convert EPL to Images & Docs
Use EPLPrinter Emulator SDK to easily convert EPL commands to PNG, JPG, PDF, PCX, Zebra GRF ASCII hex, Zebra EPL Binary Graphic, Honeywell-Intermec FingerPrint Binary Graphic, HP PCL Binary Graphic & EPSON ESC/POS NV Binary Graphic formats by writing simple C# or VB.NET code.Preview EPL Commands
Need to test EPL commands and don't have a real Zebra/Eltron printer device? No problem! Use EPLPrinter Emulator SDK to preview EPL commands without wasting any single label!High Accuracy EPL Render
EPLPrinter Emulator SDK renders EPL commands generating high quality output by reproducing built-in and resident EPL fonts for texts and barcodes with high accuracy.Virtual EPL Printer
EPLPrinter Emulator SDK works like a Virtual EPL Printer device. You setup the virtual printer with basic settings like the DPI resolution and default Label Size to finally pass to it the EPL commands to be processed.EPL Parsing & Processing
EPLPrinter Emulator SDK can parse EPL commands from a .NET string, .NET Stream or physical file. It can detect UTF-8 encoding automatically. Most of the EPL Formatting and Control Commands are supported.On-Premise Licensing
EPLPrinter Emulator SDK is licensed for Private On-Premise environments giving you full control on the infrastructure where our product will run on.Barcode Symbologies Support
EPLPrinter Emulator SDK can generate most of the linear (1D), postal, composite, stacked and 2D barcodes shipped with real Zebra printer devices.Colored Label Simulation
EPLPrinter Emulator SDK can be configured to convert EPL to PNG, JPG & PDF formats simulating a color ribbon (for label items) and a background color label. Black & White 1bpp is also supported through PCX format.Custom EPL Output Rotation
Besides EPL rotation command, EPLPrinter Emulator SDK can be configured to rotate EPL outputs to 90, 180 & 270 clockwise degrees.Custom Background Image
EPLPrinter Emulator SDK allows you to render EPL commands on a specified Background Image (in PNG or JPG formats) which can be set from a system file path, URL, Base64 string or a binary buffer (Byte Array).Custom Watermark Stamp
You can specify to the EPLPrinter Emulator SDK a custom watermark or stamp image to be rendered on top of the label output!Virtual Printer Storage
EPLPrinter Emulator SDK allows you to manage from code the virtual printer storage where graphics can be easily added, edited, updated and removed.Real-Time Clock Support
EPLPrinter Emulator SDK supports Real-Time Clock settings through the related EPL commands (TS set clock, TD date and TT time recall) or by setting them from code through the RTC properties, so date/time fields render as on a real printer.Web API for Docker!
We also offer the EPLPrinter Web API for Docker as aLinux image so it can be used with Any Development Platform and Programming Languages (.NET, Java, PHP, Javascript, Python, Ruby, etc.)
Rendered EPL Elements Tracing
EPLPrinter Emulator SDK can return the list of rendered EPL elements based on the processed commands providing the following info: EPL Command Name, Content, X, Y, Width & Height allowing post-rendering processing tasks like custom content replacement.
EPL Commands Support
EPLPrinter Emulator SDK rendering engine supports most of the EPL formatting and control commands. The following table lists the supported commands. Not listed or unsupported commands will be skipped in the parsing stage.
Barcode symbols, particularly 2D-type like QR Code, Data Matrix, Aztec Code, Maxicode..., might look different to the one printed by a real printer because EPLPrinter Emulator SDK leverages on its own barcode encoder. However, this does not mean that the rendered barcodes will not be readable at all.
| Status | EPL Command | Notes |
|---|---|---|
| A - ASCII Text | Latin resident fonts 1, 2, 3, 4, 5, 6, and 7 | |
| B - Linear Bar Code | Code 39, Code 93, Code 128, UCC Serial Shipping Container, Codabar, EAN 8-13, German Post Code, Interleaved 2 of 5, Postnet, Planet, UCC/EAN 128, UPC A-E, Plessey, MSI | |
| b - 2D Bar Code | Aztec, Data Matrix, MaxiCode, PDF417, and QR Code | |
| C - Counter | ||
| FE - End Form Store | ||
| FK - Delete Form | ||
| FR - Retrieve Form | ||
| FS - Store Form | ||
| GG - Print Graphics | ||
| GK - Delete Graphics | ||
| GM - Store Graphics | ||
| GW - Direct Graphic Write | ||
| LE - Line Draw Exclusive OR | ||
| LO - Line Draw Black | ||
| LS - Line Draw Diagonal | ||
| LW - Line Draw White | ||
| N - Clear Image Buffer | ||
| P - Print | ||
| q - Set Label Width | ||
| Q - Set Form Length | ||
| R - Set Reference Point | ||
| TD - Date Recall & Format Layout | ||
| TS - Set Real Time Clock | ||
| TT - Time Recall & Format Layout | ||
| V - Define Variable | ||
| X - Box Draw | ||
| Z - Print Direction | ||
| ^@ - Reset Printer | ||
| ? - Download Variables |
System Requirements
EPLPrinter Emulator SDK is a .NET Standard 2.0 library, so it runs on any platform that supports .NET Standard 2.0 or later:
- .NET Framework 4.6.1+
- .NET Core 2.0+ and modern .NET (.NET 5 and later)
- Mono 5.4+, Xamarin.iOS 10.14+, Xamarin.Android 8.0+, Xamarin.Mac 3.8+
- Universal Windows Platform (UWP) 10.0.16299+
Dependencies: SkiaSharp 1.68.3+, System.Text.Encoding.CodePages 4.5.0+ and Newtonsoft.Json 13.0.1+. Development with Visual Studio 2017+ (or any IDE that supports .NET Standard 2.0).
Which EPL Edition Do I Need?
The same EPL rendering engine is available in four editions:
| Edition | Best for | How you use it | Platforms |
|---|---|---|---|
| EPLPrinter Emulator SDK for .NET | .NET apps (C#, VB.NET) | In-process library: convert, preview and print from code | Windows, Linux, macOS (.NET Standard 2.0) |
| EPLPrinter Web API for Docker | Any language, servers and cloud | REST API in a Docker container | Linux container (amd64 & arm64) |
| Virtual EPL Printer Driver | Desktop users and apps that print to a Zebra printer | Installed printer: save EPL as PDF/PNG or print it on any other printer | Windows, macOS |
| EPLServer | Background integration and legacy apps | Local service: HTTP POST + raw TCP; save to disk or forward to a webhook | Windows x64, Linux x64 & ARM64, macOS (Apple Silicon & Intel) |
EPLPrinter Emulator SDK FAQ
- Do I need a Zebra or Eltron printer to preview or convert EPL?
- No. EPLPrinter Emulator SDK works like a virtual EPL printer inside your .NET app. You pass it the raw EPL commands and it returns PDF, PNG, JPG or other formats, so you can preview labels without a physical printer and without wasting labels.
- Which output formats are supported?
- PNG, JPG, PDF and PCX, plus printer formats: Zebra GRF ASCII hex (ZPL), Zebra EPL binary graphic, Honeywell-Intermec FingerPrint binary graphic, EPSON ESC/POS NV binary graphic and HP PCL.
- Can I print EPL labels on a ZPL-only Zebra printer?
- Yes. See printing. Render the EPL commands to GRF, a ZPL graphic format, with EnablePrinting set to true and send it to the printer with PrintRawCommands. This lets legacy applications that generate EPL keep working when the old EPL printers are replaced by ZPL printers, without rewriting the label code.
- Can I print EPL labels on non-Zebra printers?
- Yes. Render to Honeywell FingerPrint, EPSON ESC/POS NV or HP PCL and print with PrintRawCommands, or render to PNG/JPG and print to any driver-installed printer on Windows, or to PDF and print to any CUPS printer on Linux and macOS.
- What happens when the EPL generates more than one label?
- For example P3 prints three labels. For PDF you get a single document with one page per label. For PNG, JPG, PCX, GRF, EPL, FingerPrint, PCL and NV you get one byte array per label.
- Why does my rendered label look scaled or cut off?
- The DPI set on the virtual printer must match the DPI the EPL was designed for (for example 203 or 300 dpi), and the label size should match the q (label width) and Q (form length) commands. For example q609 at 203 dpi is a 3 inch wide label.
- Will barcodes look exactly like on a real printer?
- Linear barcodes and resident fonts are reproduced with high accuracy. 2D symbols such as QR Code, Data Matrix, Aztec, MaxiCode or PDF417 are generated by the SDK's own encoder, so they can look slightly different from a real printer while still being readable.
- Which .NET versions are supported?
- EPLPrinter Emulator SDK targets .NET Standard 2.0, so it works on .NET Framework 4.6.1+, .NET Core 2.0+, modern .NET (.NET 5 and later), Mono 5.4+, Xamarin and UWP 10.0.16299+. See system requirements.
- Does it run on Linux and macOS?
- Yes. Rendering works on Windows, Linux and macOS. For printing, use WindowsPrintJob on Windows and UnixPrintJob on Linux and macOS; serial and parallel port printers are supported on Windows only.
- How is this different from an online EPL viewer?
- EPLPrinter Emulator SDK runs on-premise inside your own application, so labels with customer or shipping data never leave your infrastructure and there is no dependency on an external web service.
- Can I use it from Java, Python, PHP or Node.js?
- The SDK is for .NET (C# and VB.NET). For any other language, use the EPLPrinter Web API for Docker, a Linux container that exposes the same rendering engine over HTTP.