Virtual ZPL Printer Driver for Windows & macOS
commands to PNG, JPG & PDF!
Redirect ZPL Printing!
Key Features
Print & Preview ZPL commands without wasting real labels!
High Quality & Accuracy ZPL Rendering
Print ZPL on any printer (laser, inkjet, other label printers)
Zebra and ZPL are registered trademarks of ZIH Corp.
Virtual ZPL Printer Driver
is not made by or endorsed by Zebra.
Convert, Print, Preview & Render ZPL commands
Virtual ZPL Printer Driver for Windows & macOS installs as a local Windows/macOS printer and allows you to Convert, Preview and Render raw ZPL (Zebra Programming Language) commands to well known image and document formats like PNG, JPG, PCX & PDF. It also can be configured to redirect the ZPL printing to any other installed printers, so you can print ZPL labels on a regular laser or inkjet printer, or test ZPL without a Zebra printer.
Windows Support
- Windows 11 / Server 2022/2019
- Windows 10 / Server 2016
- Windows 8.1 / Server 2012/R2
- Windows 7 / Server 2008 R2
macOS Support
- macOS 15 Sequoia
- macOS 14 Sonoma
- macOS 13 Ventura
- macOS 12 Monterey
- macOS 11 Big Sur
- macOS 10.15 Catalina
- macOS 10.14 Mojave
How It Works
- Install the Virtual ZPL Printer Driver. A printer named
VirtualZPLPrinter_USERNAMEis added for each user, and it also listens on a local TCP/IP port. - Open the Settings (Windows system tray or macOS menu bar) and choose the action: Write To File (PDF, PNG, JPG or PCX) or Print To another installed printer. Set the DPI and label size to match your ZPL.
- Print ZPL from your application to
VirtualZPLPrinter_USERNAME, or send raw ZPL to its TCP/IP port. Each label is saved as a file or printed on the target printer.
Features at a Glance
Virtual ZPL Printer Driver
Virtual ZPL Printer Driver installs as a virtual Windows/macOS printer which will be available in the Devices and Printers / Printers & Scanners section. This way you can send raw ZPL commands from any software or application for file conversion or redirect printing.Available for Each User
Each individual User in the Windows/macOS system will get its own Virtual ZPL Printer driver installed allowing it to customize the printer settings. The printer name will be fixed to the formatVirtualZPLPrinter_USERNAMECustom TCP/IP Printer Port
The Virtual ZPL Printer is available at each user session through a Local TCP/IP port which can be customized in the Settings section. You can send ZPL commands right to the Local Port or through the installed Windows/macOS Printer!
High Accuracy ZPL Render
Virtual ZPL Printer Driver renders ZPL commands generating high quality output by reproducing built-in and resident ZPL fonts for texts and barcodes with high accuracy. Custom Zebra Intellifont is also supported!Convert ZPL to Images & Docs
Use Virtual ZPL Printer Driver to easily convert ZPL commands to PNG, JPG, PCX & PDF. Just specify the Write To File action in the Settings section.Redirect ZPL Printing
Use Virtual ZPL Printer Driver to easily print ZPL commands to any other installed Windows/macOS printer. Just specify the Print To action in the Settings section.Barcode Symbologies Support
Virtual ZPL Printer Driver can generate most of the linear (1D), postal, composite, stacked and 2D barcodes shipped with real Zebra printer devices.Colored Label Simulation
Virtual ZPL Printer Driver can be configured to convert and print ZPL 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.On-Premise Licensing
Virtual ZPL Printer Driver is licensed for Private On-Premise environments. License is available for individual Windows/macOS devices or for Corporate-wide.Settings and Customization
Virtual ZPL Printer Driver can be configured by each User to meet its own printing needs. The Virtual Printer driver allows changing the DPI/Resolution, the Default Label Size, the Default Encoding (Code Page), the list of custom fonts & graphics, the Ribbon and the background label colors, and the TCP/IP Port. In addition, the user can configure whether the output ZPL rendering should be saved on a disk folder or being printed to any other printer available in the system.
Which ZPL Edition Do I Need?
The same ZPL rendering engine is available in four editions:
| Edition | Best for | How you use it | Platforms |
|---|---|---|---|
| ZPLPrinter 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) |
| ZPLPrinter Web API for Docker | Any language, servers and cloud | REST API in a Docker container | Linux container (amd64 & arm64) |
| Virtual ZPL Printer Driver | Desktop users and apps that print to a Zebra printer | Installed printer: save ZPL as PDF/PNG or print it on any other printer | Windows, macOS |
| ZPLServer | 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) |
ZPL Commands Support
Virtual ZPL Printer Driver rendering engine supports most of the ZPL 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 Virtual ZPL Printer Driver leverages on its own barcode encoder. However, this does not mean that the rendered barcodes will not be readable at all.
| Status | ZPL Command | Notes |
|---|---|---|
| ^A Scalable/Bitmapped Font | ||
| ^A@ Use Font Name to Call Font | .FNT extension is not supported | |
| ^B0 Aztec Bar Code Parameters | ECICs and Structured Appended format are not supported | |
| ^B1 Code 11 Bar Code | ||
| ^B2 Interleaved 2 of 5 Bar Code | ||
| ^B3 Code 39 Bar Code | ||
| ^B4 Code 49 | Starting mode is not supported | |
| ^B5 Planet Code bar code | ||
| ^B7 PDF417 Bar Code | ||
| ^B8 EAN-8 Bar Code | ||
| ^B9 UPC-E Bar Code | ||
| ^BA Code 93 Bar Code | ||
| ^BB Codablock | Codablock-F supported only | |
| ^BC Code 128 Bar Code (Subsets A, B, and C) | ||
| ^BD UPS MaxiCode Bar Code | ||
| ^BE EAN-13 Bar Code | ||
| ^BF MicroPDF417 Bar Code | ||
| ^BI Industrial 2 of 5 Bar Codes | ||
| ^BJ Standard 2 of 5 Bar Code | ||
| ^BK ANSI Codabar Bar Code | ||
| ^BL LOGMARS Bar Code | ||
| ^BM MSI Bar Code | ||
| ^BO Aztec Bar Code Parameters | ECICs and Structured Appended format are not supported | |
| ^BP Plessey Bar Code | ||
| ^BQ QR Code Bar Code | Model 1 and Data Encoding Switches are not supported | |
| ^BR GS1 Databar | ||
| ^BS UPC/EAN Extensions | ||
| ^BT TLC39 | ||
| ^BU UPC-A Bar Code | ||
| ^BX Data Matrix Bar Code | Quality Level < 200 is not supported | |
| ^BY Bar Code Field Default | ||
| ^BZ POSTAL Bar Code | ||
| ^CC Change Caret | ||
| ^CD Change Delimiter | ||
| ^CF Change Alphanumeric Default Font | ||
| ^CI Change International Font/Encoding | Character remapping is not supported | |
| ^CT Change Tilde | ||
| ^CW Font Identifier | ||
| ~DB Download Bitmap Font | ||
| ^DF Download Format | ||
| ~DG Download Graphics | ||
| ~DU Download Unbounded TrueType Font | ||
| ~DY Download Objects | AR-compressed format and bitmap, .pcx, .nrd, .pac, .wml, .htm, .get extensions are not supported | |
| ~EG Erase Download Graphics | ||
| ^FA Field Allocate | ||
| ^FB Field Block | ||
| ^FC Field Clock | ||
| ^FD Field Data | ||
| ^FH Field Hexadecimal Indicator | ||
| ^FL Font Linking | ||
| ^FM Multiple Field Origin Locations | ||
| ^FN Field Number | ||
| ^FO Field Origin | ||
| ^FP Field Parameter | ||
| ^FR Field Reverse Print | ||
| ^FS Field Separator | ||
| ^FT Field Typeset | ||
| ^FV Field Variable | ||
| ^FW Field Orientation | ||
| ^FX Comment | ||
| ^GB Graphic Box | ||
| ^GC Graphic Circle | ||
| ^GD Graphic Diagonal Line | ||
| ^GE Graphic Ellipse | ||
| ^GF Graphic Field | ||
| ^GS Graphic Symbol | ||
| ^ID Object Delete | ||
| ^IL Image Load | ||
| ^IM Image Move | ||
| ^IS Image Save | ||
| ~JR Power On Reset | ||
| ^LH Label Home | ||
| ^LL Label Length | ||
| ^LR Label Reverse Print | ||
| ^LS Label Shift | ||
| ^LT Label Top | ||
| ^MC Map Clear | ||
| ^MU Set Units of Measurement | ||
| ^PA Advanced Text Properties | ||
| ^PM Printing Mirror Image of Label | ||
| ^PO Print Orientation | ||
| ^PQ Print Quantity | ||
| ^PW Print Width | ||
| ^RF Read or Write RFID Format | Only Write mode is supported | |
| ^RQ Quick Write EPC Data and Passwords | ||
| ^SF Serialization Field | ||
| ^SL Set Mode and Language (for Real-Time Clock) | ||
| ^SN Serialization Data | ||
| ^SO Set Offset (for Real-Time Clock) | ||
| ^ST Set Date and Time (for Real-Time Clock) | ||
| ^TB Text Blocks | ||
| ^TO Transfer Object | ||
| ~WC Print Configuration Label | ||
| ^XA Start Format | ||
| ^XF Recall Format | ||
| ^XG Recall Graphic | ||
| ^XZ End Format | ||
| ^WF Encode AFI or DSFID Byte | ||
| ^WT Write (Encode) Tag |
Support for JSON Payload
The Virtual ZPL Printer Driver can handle raw printer commands as well as JSON Payload. The JSON Payload has the following format:
Virtual ZPL Printer Driver FAQ
-
Install the Virtual ZPL Printer Driver, open its Settings from the Windows system tray or the macOS menu bar, choose the Print To action and select the target printer. Every ZPL job sent to the virtual printer is rendered and printed on that printer, so you can print ZPL labels without a ZPL printer.
-
Choose the Write To File action in the Settings and select PDF, PNG, JPG or PCX. Every ZPL job sent to the virtual printer is saved as a file in the configured folder.
-
Yes. The Virtual ZPL Printer Driver works as a ZPL printer emulator: print the ZPL from your application to the virtual printer and check the rendered PDF or image, without wasting real labels.
-
Each Windows or macOS user gets their own virtual printer named VirtualZPLPrinter_USERNAME, with their own settings. It also listens on a local TCP/IP port shown in the Settings, so you can send ZPL directly to that port.
-
Windows 11, 10, 8.1 and 7, Windows Server 2022, 2019, 2016, 2012 R2 and 2008 R2, and macOS 10.14 Mojave to macOS 15 Sequoia.
-
The problem is that apps like those will usually break/invalidate the raw ZPL commands structure when printing to our virtual driver. To bypass this problem you should do the following:
- Under Windows
- Save the ZPL file as is (e.g. name it SampleZPL.txt)
Download our rawprint.exe utility.
IMPORTANT! The rawprint.exe is digitally-signed with a Windows Authenticode Certificate issued by Sectigo Limited. Run the utility only if the Publisher is Neodynamic; otherwise contact us.You can run it in two different ways:
- Graphical UI: just double click on rawprint.exe, select the target printer, select the ZPL file saved before and finally click Print button. That's it!
- From Command Prompt:
- Open a Command Prompt window (Click Start button and type
cmd) and go to the folder where the rawprint.exe file was downloaded. - Type this command (NOTE: Be sure you replace Neo with your own user name and the SampleZPL.txt full path):
rawprint.exe -p VirtualZPLPrinter_Neo -f SampleZPL.txt
- Open a Command Prompt window (Click Start button and type
- Under macOS
- Save the ZPL file as is (e.g. name it SampleZPL.txt)
- Open a Terminal window
- Type this command (NOTE: Be sure you replace Neo with your own user name and the SampleZPL.txt full path):
lpr -P VirtualZPLPrinter_Neo -o raw SampleZPL.txt
- Under Windows
-
Here is an example of how to send raw ZPL commands or a JSON payload right to the virtual printer IP and port. We'll suppose that the printer IP is
192.168.1.20and the port is60800(Please change it based on your own scenario. The VirtualZPLPrinter port is displayed by the Settings page.)- Under Windows
Powershell script:
$tcp = New-Object System.Net.Sockets.TcpClient("192.168.1.20", 60800)
$stream = $tcp.GetStream()
$bytes = [Text.Encoding]::ASCII.GetBytes("^XA^FO50,50^ADN,36,20^FDHello World^FS^XZ")
$stream.Write($bytes, 0, $bytes.Length)
$tcp.Close() - Under macOS
Terminal:
echo "^XA^FO50,50^ADN,36,20^FDHello World^FS^XZ" | nc 192.168.1.20 60800
- Under Windows