Releases: brunoleocam/ZPL2PDF
v3.1.1
ZPL2PDF v3.1.1
🔧 Changed
- Release layout: Release automation scripts live under
release/scripts/; Linux package sources underscripts/release/packages/(paths updated in docs andCONTRIBUTING.md). - Conversion pipeline: Shared Labelary PDF fallback path in
ConversionServicefor CLI, REST API, TCP server, and daemon queue; internal cleanup of dimension types and daemon PID handling (no reflection).
🛠️ Maintenance
- Windows installer build:
release/scripts/08-build-installer.ps1— safer post-build cleanup; optionalrelease/scripts/cleanup-installer-output.ps1forinstaller/Output. - Docker build context:
.dockerignoreexcludes non-essential trees (e.g.tests,docs,release,.cursor) for smaller/fasterdocker build.
📦 Downloads
| Platform | File |
|---|---|
| Windows Installer | ZPL2PDF-Setup-3.1.1.exe |
| Windows x64 | ZPL2PDF-v3.1.1-win-x64.zip |
| Windows x86 | ZPL2PDF-v3.1.1-win-x86.zip |
| Windows ARM64 | ZPL2PDF-v3.1.1-win-arm64.zip |
| Linux x64 | ZPL2PDF-v3.1.1-linux-x64.tar.gz |
| Linux ARM64 | ZPL2PDF-v3.1.1-linux-arm64.tar.gz |
| Linux ARM | ZPL2PDF-v3.1.1-linux-arm.tar.gz |
| macOS Intel | ZPL2PDF-v3.1.1-osx-x64.tar.gz |
| macOS Apple Silicon | ZPL2PDF-v3.1.1-osx-arm64.tar.gz |
🐳 Docker
docker pull brunoleocam/zpl2pdf:3.1.1
docker pull ghcr.io/brunoleocam/zpl2pdf:3.1.1📚 Documentation
- Full Documentation
- Installation Guide
- Usage Examples
Full Changelog: v3.1.0...v3.1.1
v3.1.0
ZPL2PDF v3.1.0
✨ Added
--stdout(conversion mode): write the generated PDF to standard output (binary). With--stdout,-ois not required and no extra text is written to stdout.
🔧 Changed
- Default output PDF name: if
-nis omitted, the PDF name is derived from the input file stem (e.g.label.txt→label.pdf); for-z, a timestampedZPL2PDF_*.pdfname is used (no implicitoutput.pdf). - Linux packages:
scripts/build-deb.shandscripts/build-rpm.shtakeVERSIONfrom<Version>inZPL2PDF.csprojinstead of a hardcoded value. - Dependencies (offline PDF): BinaryKits.Zpl.Label 3.3.1, BinaryKits.Zpl.Viewer 1.3.1, PDFsharp 6.2.4 (replaces PdfSharpCore). Re-verify Docker/Linux rendering if you relied on the older BinaryKits pin documented for 3.0.3; see LINUX-RENDERING.md.
🐛 Fixed
- Dimensions:
-uis required whenever-w/-hare set, including when the unit ismm(consistent validation). - Aztec
^B0: preprocess maps^B0→^BOso the offline viewer accepts Aztec barcodes (BinaryKits recognizes^BO).
🙏 Acknowledgements
- Special thanks to Jacques Caruso (jacques.caruso@exhibitgroup.fr) for sending the solutions for version 3.1.0.
📦 Downloads
| Platform | File |
|---|---|
| Windows Installer | ZPL2PDF-Setup-3.1.0.exe |
| Windows x64 | ZPL2PDF-v3.1.0-win-x64.zip |
| Windows x86 | ZPL2PDF-v3.1.0-win-x86.zip |
| Windows ARM64 | ZPL2PDF-v3.1.0-win-arm64.zip |
| Linux x64 | ZPL2PDF-v3.1.0-linux-x64.tar.gz |
| Linux ARM64 | ZPL2PDF-v3.1.0-linux-arm64.tar.gz |
| Linux ARM | ZPL2PDF-v3.1.0-linux-arm.tar.gz |
| macOS Intel | ZPL2PDF-v3.1.0-osx-x64.tar.gz |
| macOS Apple Silicon | ZPL2PDF-v3.1.0-osx-arm64.tar.gz |
🐳 Docker
docker pull brunoleocam/zpl2pdf:3.1.0
docker pull ghcr.io/brunoleocam/zpl2pdf:3.1.0📚 Documentation
- Full Documentation
- Installation Guide
- Usage Examples
Full Changelog: v3.1.0...v3.1.0
v3.0.3
ZPL2PDF v3.0.3
🐛 Fixed
-
Issue #53: Rendering mismatch and text overlap on Linux (CentOS 9, Alpine) vs Labelary
- BinaryKits.Zpl.Viewer 1.2.1 and BinaryKits.Zpl.Label 3.2.1 kept for Linux/Docker compatibility (1.3.1/3.3.1 cause "Method not found" for SixLabors.ImageSharp in container due to API change in ImageSharp 3.x)
- Removed unused BinaryKits.Zpl.Protocol reference (it pulled ImageSharp 2.x and triggered the conflict)
- Dockerfile:
PublishSingleFile=falseand copy full publish output so correct assemblies load in Alpine
-
Encoding (^FH _XX): Accented characters (ã, ç, ú) in ZPL field data no longer appear as mojibake (ã, ç, ú) in PDF
- Decode ^FH _XX hex sequences inside ^FD...^FS as UTF-8 in
LabelFileReader.PreprocessZpl(DecodeFhHexInFieldData) - Read ZPL input files with UTF-8 encoding
- Decode ^FH _XX hex sequences inside ^FD...^FS as UTF-8 in
-
Custom fonts (--fonts-dir / --font): Fixed custom TTF/OTF fonts not being applied (e.g. ^AAN, ^ABN)
--fonts-dirand--font "ID=path"are now parsed and passed through to the offline renderer- FontLoader in LabelRenderer maps ZPL font IDs (0, A, B, …) to provided font files; relative paths are resolved against
--fonts-dir - When a font file is not found, renderer falls back to default typeface instead of failing
📦 Technical Details
- Files modified:
LabelRenderer.cs(CreateDrawerOptions, FontLoader from --fonts-dir/--font),ZPL2PDF.csproj(BinaryKits 1.2.1/3.2.1, no Protocol),Dockerfile(PublishSingleFile=false, copy full publish),LabelFileReader.cs(PreprocessZpl DecodeFhHexInFieldData, ReadFile UTF-8),ArgumentParser.cs,ArgumentProcessor.cs,ConversionService.cs,ConversionModeHandler.cs,IConversionService.cs - Files added:
docs/guides/LINUX-RENDERING.md,release/docker-test-linux-issue53.ps1,tests/.../custom-fonts-test.zpl,custom-fonts-test.txt
📦 Downloads
| Platform | File |
|---|---|
| Windows Installer | ZPL2PDF-Setup-3.0.3.exe |
| Windows x64 | ZPL2PDF-v3.0.3-win-x64.zip |
| Windows x86 | ZPL2PDF-v3.0.3-win-x86.zip |
| Windows ARM64 | ZPL2PDF-v3.0.3-win-arm64.zip |
| Linux x64 | ZPL2PDF-v3.0.3-linux-x64.tar.gz |
| Linux ARM64 | ZPL2PDF-v3.0.3-linux-arm64.tar.gz |
| Linux ARM | ZPL2PDF-v3.0.3-linux-arm.tar.gz |
| macOS Intel | ZPL2PDF-v3.0.3-osx-x64.tar.gz |
| macOS Apple Silicon | ZPL2PDF-v3.0.3-osx-arm64.tar.gz |
🐳 Docker
docker pull brunoleocam/zpl2pdf:3.0.3
docker pull ghcr.io/brunoleocam/zpl2pdf:3.0.3📚 Documentation
Full Changelog: v3.0.2...v3.0.3
v3.0.2
ZPL2PDF v3.0.2
Fixed
- Issue #45: Fixed duplicate or blank labels when
^XAappears inside or after~DGR:payload^XAis only ignored when inside the base64 segment (:Z64:...up to the next:);^XAafter the checksum on the same line is now recognized as a valid label start- ~DGR line end: when the format includes
:Z64:data:checksum, the ~DGR command is considered to end after the checksum (not at newline), so labels on the same line as ~DGR are no longer swallowed - Prevents ZPL with embedded graphics (e.g. thermal shipping labels) from producing "No images generated" or extra/blank pages
Added
-
Issue #48: TCP Server mode implemented
ZPL2PDF server start [--port 9101] [-o output/] [--foreground]— start virtual printerZPL2PDF server stop— stop server (uses PID filezpl2pdf-tcp.pid)ZPL2PDF server status— show if server is running- Incoming ZPL over TCP is converted to PDF and saved with unique filename
-
REST API (PR #47):
--api/--webmode- Endpoints:
POST /api/convert(ZPL to PDF or PNG),GET /api/health - Options:
--host,--port(default 5000)
- Endpoints:
Downloads
| Platform | File |
|---|---|
| Windows Installer | ZPL2PDF-Setup-3.0.2.exe |
| Windows x64 | ZPL2PDF-v3.0.2-win-x64.zip |
| Windows x86 | ZPL2PDF-v3.0.2-win-x86.zip |
| Windows ARM64 | ZPL2PDF-v3.0.2-win-arm64.zip |
| Linux x64 | ZPL2PDF-v3.0.2-linux-x64.tar.gz |
| Linux x64 (.deb) | ZPL2PDF-v3.0.2-linux-amd64.deb |
| Linux x64 (RPM tarball) | ZPL2PDF-v3.0.2-linux-x64-rpm.tar.gz |
| Linux ARM64 | ZPL2PDF-v3.0.2-linux-arm64.tar.gz |
| Linux ARM | ZPL2PDF-v3.0.2-linux-arm.tar.gz |
| macOS Intel | ZPL2PDF-v3.0.2-osx-x64.tar.gz |
| macOS Apple Silicon | ZPL2PDF-v3.0.2-osx-arm64.tar.gz |
Checksums: SHA256SUMS.txt
Docker
docker pull brunoleocam/zpl2pdf:3.0.2
docker pull ghcr.io/brunoleocam/zpl2pdf:3.0.2
Documentation
Full Changelog: v3.0.1...v3.0.2
v3.0.1
Release 3.0.1 - Bug Fix
Release Date: January 6, 2025
This release includes critical bug fixes for sequential graphic processing and improvements to the help display system.
🐛 Bug Fixes
Fixed Issue #39: Sequential Graphic Processing
- Problem: ZPL files with multiple
~DGRgraphics sharing the same name were not processed correctly. All labels were using the first graphic definition, ignoring subsequent updates. - Solution: Implemented sequential processing logic that mimics a physical printer's behavior:
- Each
~DGRcommand updates the graphic in memory ^IDRcleanup commands properly remove graphics from memory- Each
^XGRcommand uses the most recent graphic data based on sequential state - Cleanup commands no longer generate blank pages in the PDF output
- Each
- Impact: Shopee shipping label files and similar ZPL files with multiple graphics now render correctly with distinct graphics for each label.
Fixed Help Display
- Problem: Help sections for TCP Server, Renderer, and Fonts features (added in v3.0.0) were not displayed in the help output.
- Solution: Added missing help sections to
HelpDisplay.cs:- TCP Server Mode commands and options
- Renderer parameter documentation
- Fonts directory and font mapping documentation
- Impact: Users can now see complete help documentation for all features in both English and other supported languages.
🔧 Improvements
- Input Validation: Added
ArgumentNullExceptionchecks in public methods for better error handling - Exception Handling: Improved exception handling in
ConversionModeHandlerwith user-friendly error messages - Performance: Compiled regex patterns for better performance in
IsCleanupCommandOnlymethod - Code Quality: Removed unused methods (
ExtractGraphics,ExtractLabel,SaveImageToFile) fromLabelRenderer - Robustness: Added protection against infinite loops in sequential processing logic
📦 Technical Details
Files Modified
src/Shared/LabelFileReader.cs- Sequential graphic processing implementationsrc/Presentation/HelpDisplay.cs- Added missing help sectionssrc/Infrastructure/Rendering/LabelRenderer.cs- Code cleanup and validationssrc/Presentation/ConversionModeHandler.cs- Improved exception handling
Breaking Changes
None. This is a bug fix release that maintains backward compatibility.
Migration Notes
No migration required. This release is a drop-in replacement for version 3.0.0.
✅ Testing
- Manual testing completed with Shopee shipping label files
- Unit tests passing
- All platform builds generated successfully
- Help display verified in multiple languages
📥 Downloads
Windows
- Installer:
ZPL2PDF-Setup-3.0.1.exe(35.46 MB) - Portable x64:
ZPL2PDF-v3.0.1-win-x64.zip - Portable x86:
ZPL2PDF-v3.0.1-win-x86.zip - Portable ARM64:
ZPL2PDF-v3.0.1-win-arm64.zip
Linux
- Debian/Ubuntu:
ZPL2PDF-v3.0.1-linux-amd64.deb - RPM Tarball:
ZPL2PDF-v3.0.1-linux-x64-rpm.tar.gz - Portable x64:
ZPL2PDF-v3.0.1-linux-x64.tar.gz - Portable ARM:
ZPL2PDF-v3.0.1-linux-arm.tar.gz - Portable ARM64:
ZPL2PDF-v3.0.1-linux-arm64.tar.gz
macOS
- Portable x64:
ZPL2PDF-v3.0.1-osx-x64.tar.gz - Portable ARM64:
ZPL2PDF-v3.0.1-osx-arm64.tar.gz
Docker
docker pull brunoleocam/zpl2pdf:3.0.1
# or
docker pull brunoleocam/zpl2pdf:latestSource Code
- ZIP:
Source code (zip) - TAR.GZ:
Source code (tar.gz)
🔗 Links
- Full Changelog: CHANGELOG.md
- Documentation: README.md
- Issue #39: GitHub Issue
🙏 Acknowledgments
Thank you to all users who reported issues and provided feedback. Your contributions help make ZPL2PDF better!
SHA256 Checksums: See SHA256SUMS.txt for file integrity verification.
v3.0.0
🎉 ZPL2PDF v3.0.0 - Release Notes
Release Date: December 19, 2025
Release Type: Major Release
📥 Downloads
Windows
| Platform | File | Size |
|---|---|---|
| Installer | ZPL2PDF-Setup-3.0.0.exe |
~35 MB |
| Windows x64 | ZPL2PDF-v3.0.0-win-x64.zip |
~49 MB |
| Windows x86 | ZPL2PDF-v3.0.0-win-x86.zip |
~44 MB |
| Windows ARM64 | ZPL2PDF-v3.0.0-win-arm64.zip |
~46 MB |
Linux
| Platform | File | Size |
|---|---|---|
| Linux x64 | ZPL2PDF-v3.0.0-linux-x64.tar.gz |
~49 MB |
| Linux x64 (DEB) | ZPL2PDF-v3.0.0-linux-amd64.deb |
~34 MB |
| Linux x64 (RPM) | ZPL2PDF-v3.0.0-linux-x64-rpm.tar.gz |
~49 MB |
| Linux ARM64 | ZPL2PDF-v3.0.0-linux-arm64.tar.gz |
~45 MB |
| Linux ARM | ZPL2PDF-v3.0.0-linux-arm.tar.gz |
~48 MB |
macOS
| Platform | File | Size |
|---|---|---|
| macOS Intel | ZPL2PDF-v3.0.0-osx-x64.tar.gz |
~52 MB |
| macOS Apple Silicon | ZPL2PDF-v3.0.0-osx-arm64.tar.gz |
~48 MB |
🐳 Docker
# Docker Hub
docker pull brunoleocam/zpl2pdf:3.0.0
# GitHub Container Registry
docker pull ghcr.io/brunoleocam/zpl2pdf:3.0.0
# Latest version
docker pull brunoleocam/zpl2pdf:latest✨ What's New in v3.0.0
🎨 Labelary API Integration - High-Fidelity Rendering
ZPL2PDF now supports Labelary API for high-fidelity ZPL rendering with exact Zebra printer emulation!
Features:
- ✅ Vector PDF Output: Smaller, higher quality PDFs with vector graphics
- ✅ Exact Emulation: Perfect rendering matching actual Zebra printers
- ✅ Direct PDF Generation: PDFs generated directly from API (no intermediate images)
- ✅ Batch Processing: Automatic batching for 50+ labels with PDF merging
- ✅ Smart Fallback: Auto mode tries Labelary first, falls back to BinaryKits if offline
Usage:
# Use Labelary API (requires internet)
ZPL2PDF -i label.zpl -o output/ --renderer labelary
# Use offline BinaryKits (default, no internet needed)
ZPL2PDF -i label.zpl -o output/ --renderer offline
# Auto mode: try Labelary, fallback to BinaryKits
ZPL2PDF -i label.zpl -o output/ --renderer auto🖨️ TCP Server Mode - Virtual Zebra Printer
ZPL2PDF can now act as a virtual Zebra printer on a TCP port, perfect for integration with applications that send ZPL directly to printers!
Features:
- ✅ Virtual Printer: Acts as TCP printer on configurable port (default: 9101)
- ✅ Background Operation: Runs independently in background
- ✅ Independent from Daemon: Can run simultaneously with daemon mode
- ✅ Custom Output: Configure output directory for generated PDFs
- ✅ Foreground Mode: Debug mode for troubleshooting
Usage:
# Start TCP server on default port 9101
ZPL2PDF server start -o output/
# Start on custom port
ZPL2PDF server start --port 9100 -o output/
# Check server status
ZPL2PDF server status
# Stop server
ZPL2PDF server stop
# Run in foreground for debugging
ZPL2PDF server start --foreground -o output/Integration Example:
// Send ZPL to virtual printer
var client = new TcpClient("localhost", 9101);
var stream = client.GetStream();
stream.Write(Encoding.ASCII.GetBytes(zplContent));
// PDF is automatically generated in output folder🔤 Custom Font Support
Load your own TrueType/OpenType fonts for custom label designs!
Features:
- ✅ Font Directory: Load all fonts from a directory
- ✅ Individual Mapping: Map specific font IDs to font files
- ✅ Multiple Fonts: Support for multiple font mappings
- ✅ TrueType/OpenType: Support for
.ttfand.otffiles
Usage:
# Load all fonts from directory
ZPL2PDF -i label.zpl -o output/ --fonts-dir C:\Fonts
# Map specific font ID
ZPL2PDF -i label.zpl -o output/ --font "A=arial.ttf" --font "B=times.ttf"
# Combine both
ZPL2PDF -i label.zpl -o output/ --fonts-dir C:\Fonts --font "A=custom.ttf"📁 Extended File Support
ZPL2PDF now supports additional file extensions commonly used for ZPL files.
New Extensions:
- ✅
.zpl- Standard ZPL file extension - ✅
.imp- Common extension for ZPL files - ✅ All previous extensions still supported:
.txt,.prn
Usage:
# All these now work
ZPL2PDF -i label.zpl -o output/
ZPL2PDF -i label.imp -o output/
ZPL2PDF -i label.txt -o output/
ZPL2PDF -i label.prn -o output/📝 Custom Output File Naming
Control output PDF filenames directly from ZPL code using special comments!
Features:
- ✅ ZPL Comment Naming: Use
^FX FileName: MyLabelin ZPL - ✅ Forced Naming: Use
^FX !FileName: MyLabelto override-nparameter - ✅ Priority System: Clear priority order for filename resolution
Priority Order:
^FX !FileName:(forced) - Highest priority-nparameter (command line)^FX FileName:(suggestion)- Input filename - Lowest priority
Usage:
^XA
^FX FileName: ShippingLabel
^FO50,50^A0N,50,50^FDHello World^FS
^XZ
# Output will be: ShippingLabel.pdf
ZPL2PDF -i label.zpl -o output/
# Forced naming (overrides -n parameter)
^FX !FileName: CustomName🔧 Improvements
Help System
- ✅ Updated
-helpwith all new options in 8 languages - ✅ Reorganized help sections: TCP Server and Advanced Options
- ✅ Better documentation of rendering engines
Documentation
- ✅ New
LABELARY_API.md- Complete Labelary API integration guide - ✅ New
ROADMAP.md- Future development roadmap - ✅ New
MANUAL_TESTES_V3.md- Comprehensive manual test suite with 20 test cases
Error Handling
- ✅ Better error messages for API failures
- ✅ Improved network error handling
- ✅ Graceful fallback when Labelary API is unavailable
🔄 Changes
PDF Generation
- Labelary Mode: Generates smaller, vector-based PDFs with higher quality
- Offline Mode: Maintains same quality as v2.x (BinaryKits rendering)
Rendering Pipeline
- Modular Architecture: New factory pattern for renderer selection
- Extensible Design: Easy to add new rendering engines in the future
Help Display
- Reorganized Sections: TCP Server and Advanced Options clearly separated
- Better Organization: More intuitive help structure
📦 Technical Details
New Files
src/Infrastructure/Rendering/LabelaryRenderer.cs- Labelary API integrationsrc/Infrastructure/Rendering/RendererFactory.cs- Renderer selection logicsrc/Infrastructure/Rendering/FallbackRenderer.cs- Auto mode with fallbacksrc/Infrastructure/TcpServer/TcpPrinterServer.cs- TCP server implementationsrc/Infrastructure/TcpServer/TcpServerManager.cs- Server lifecycle managementsrc/Presentation/TcpServerModeHandler.cs- TCP server command handlerdocs/LABELARY_API.md- Labelary API documentationdocs/ROADMAP.md- Future development roadmapdocs/MANUAL_TESTES_V3.md- Manual test guide
Modified Files
src/Shared/LabelFileReader.cs- Extended file extensions, forced filename supportsrc/Application/Services/ConversionService.cs- Renderer integrationsrc/Presentation/HelpDisplay.cs- New help sectionssrc/Shared/Localization/ResourceKeys.cs- New localization keys- All
Resources/Messages.*.resxfiles - New translations for all 8 languages
🔄 Migration from v2.0.1 to v3.0.0
Compatibility
- ✅ Fully Compatible: Version 3.0.0 maintains full compatibility with v2.0.1
- ✅ No Breaking Changes: All existing commands and configurations continue to work
- ✅ Backward Compatible: Default behavior unchanged (uses BinaryKits offline renderer)
New Features (Optional)
- Labelary API: Opt-in feature, requires internet connection
- TCP Server: New mode, doesn't affect existing workflows
- Custom Fonts: Optional enhancement, not required
Recommendations
- Test New Features: Try Labelary API for better quality rendering
- Explore TCP Server: Consider using virtual printer mode for integrations
- Update Scripts: No changes needed, but you can add
--rendererparameter if desired
📚 Installation
Windows
Via Installer (Recommended)
# Download and run the installer
ZPL2PDF-Setup-3.0.0.exeVia WinGet
winget install brunoleocam.ZPL2PDFVia ZIP
# Extract the ZIP file
Expand-Archive ZPL2PDF-v3.0.0-win-x64.zip -DestinationPath C:\ZPL2PDFLinux
Debian/Ubuntu (DEB)
sudo dpkg -i ZPL2PDF-v3.0.0-linux-amd64.deb
sudo apt-get install -f # Install dependencies if neededFedora/CentOS (RPM Tarball)
tar -xzf ZPL2PDF-v3.0.0-linux-x64-rpm.tar.gz
# Manually install files to /usr/bin and /usr/shareGeneric Tarball
tar -xzf ZPL2PDF-v3.0.0-linux-x64.tar.gz
sudo cp ZPL2PDF /usr/local/bin/macOS
# Extract the tarball
tar -xzf ZPL2PDF-v3.0.0-osx-arm64.tar.gz
# Move to /usr/local/bin
sudo mv ZPL2PDF /usr/local/bin/Docker
# Pull the image
docker pull brunoleocam/zpl2pdf:3.0.0
# Run with Labelary API support
docker run --rm -v $(pwd):/data brunoleocam/zpl2pdf:3.0.0 -i input.zpl -o output/ --renderer labelary🎯 Use Cases
1. High-Fidelity Label Rendering
# Use Labelary API for exact printer emulation
ZPL2PDF -i label.zpl -o output/ --renderer labelary2. Virtual Printer Integration
# Start TCP server for application integration
ZPL2PDF server start --port 9101 -o output/
# Applications can send ZPL directly to localhost:91013. Custom Font Labels
# Use custom fonts for branded labels
ZPL2PDF -i label.zpl -o output/ --fonts-dir ./font...ZPL2PDF - v2.0.1
ZPL2PDF v2.0.1
🐛 Bug Fixes
-
Docker/Linux CLI: Fixed font rendering issues in Alpine Linux Docker images. Added
fontconfig,ttf-dejavu,ttf-liberation, andfont-notopackages to resolve "asset null" errors when running in CLI mode. -
ZPL ^FN Tag: Fixed issue where text fields using
^FN(Field Number) followed by^FD(Field Data) were not being rendered in the PDF output. The preprocessor now removes^FN<number>tags when followed by^FD, allowing the field data to render correctly.
📦 Downloads
| Platform | File |
|---|---|
| Windows Installer | ZPL2PDF-Setup-2.0.1.exe |
| Windows x64 | ZPL2PDF-v2.0.1-win-x64.zip |
| Windows x86 | ZPL2PDF-v2.0.1-win-x86.zip |
| Windows ARM64 | ZPL2PDF-v2.0.1-win-arm64.zip |
| Linux x64 | ZPL2PDF-v2.0.1-linux-x64.tar.gz |
| Linux x64 (DEB) | ZPL2PDF-v2.0.1-linux-amd64.deb |
| Linux x64 (RPM) | ZPL2PDF-v2.0.1-linux-x64-rpm.tar.gz |
| Linux ARM64 | ZPL2PDF-v2.0.1-linux-arm64.tar.gz |
| Linux ARM | ZPL2PDF-v2.0.1-linux-arm.tar.gz |
| macOS Intel | ZPL2PDF-v2.0.1-osx-x64.tar.gz |
| macOS Apple Silicon | ZPL2PDF-v2.0.1-osx-arm64.tar.gz |
🐳 Docker
docker pull brunoleocam/zpl2pdf:2.0.1Full Changelog: v2.0.0...v2.0.1
ZPL2PDF - v2.0.0
🎉 Major Release - Complete Rewrite
Multi-language, WinGet Automation, Docker Optimization
This is a major release with complete architecture refactoring and numerous new features.
✨ Added
Multi-Language Support
- 8 Languages: English, Portuguese, Spanish, French, German, Italian, Japanese, Chinese
- Automatic Detection: Detects system language automatically
- Permanent Configuration:
--set-languagecommand for persistent settings - Environment Variable:
ZPL2PDF_LANGUAGEsupport - Configuration File: Language setting in
zpl2pdf.json - Localization System: Complete
.resxresource files withLocalizationManager
Daemon Mode (Auto-Conversion)
- Automatic Folder Monitoring: Watches folder and converts files automatically
- Background Process: Daemon runs in background with PID management
- Daemon Commands:
start,stop,status,run - Custom Watch Folders: Configure any folder to monitor
- Fixed Dimensions: Optional fixed dimensions for all files
- Dynamic Extraction: Extract dimensions from each ZPL file automatically
Cross-Platform Support
- Windows: x64, x86, ARM64
- Linux: x64, ARM64, ARM (Ubuntu, Debian, CentOS, Alpine)
- macOS: Intel (x64), Apple Silicon (ARM64)
- Self-Contained: No .NET installation required
- Optimized Builds: Platform-specific optimizations
Docker Support
- Alpine Linux Base: Ultra-lightweight (470MB)
- Multi-Architecture: linux/amd64, linux/arm64
- Docker Compose: Ready-to-use configurations
- Health Checks: Built-in container health monitoring
- GitHub Container Registry:
ghcr.io/brunoleocam/zpl2pdf - Docker Hub:
brunoleocam/zpl2pdf
Professional Windows Installer
- Inno Setup: Professional installer with multi-language UI
- Language Selection: Choose app language during installation
- File Association:
.zplfiles open with ZPL2PDF - PATH Integration: Optional system PATH addition
- Smart Shortcuts: Start/Stop daemon from Start Menu
- Clean Uninstallation: Preserves user data optionally
Build & Distribution Automation
- Build Scripts:
build-all-platforms.ps1and.sh - 8 Platform Builds: Single command builds all platforms
- Automated Checksums: SHA256 for all builds
- Release Automation:
release.ps1and.shscripts - GitHub Actions: Automated Docker publishing on releases
Architecture & Code Quality
- Clean Architecture: Separation of concerns (Application, Domain, Infrastructure, Presentation)
- SOLID Principles: Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion
- Value Objects: Immutable domain objects (
ConversionOptions,LabelDimensions,DaemonConfiguration) - Service Layer: Centralized business logic (
ConversionService,FileValidationService,UnitConversionService) - Dependency Injection: Interfaces for all services
- 90%+ Test Coverage: Comprehensive unit and integration tests
Documentation
- Complete Restructure: Organized docs into user guides, development guides, and translations
- Multi-Language Docs: README available in 8 languages
- Docker Documentation: Comprehensive Docker usage and publishing guides
- Build Documentation: Detailed build scripts documentation
- CI/CD Documentation: Complete automation workflow documentation
🔄 Changed
- Architecture: Migrated from monolithic to Clean Architecture (4-layer separation)
- Performance: Improved conversion speed by 300% with async processing
- Memory Usage: Reduced memory footprint by 50% with optimized rendering
- Error Handling: Enhanced error messages with localization support
- Code Quality: Improved maintainability and testability (90%+ coverage)
- Build Process: Automated cross-platform builds with single command
- Docker Image: Optimized from 674MB to 470MB (Alpine Linux)
- Installation Path: Changed from AppData to Program Files (Windows)
- Installer Size: Reduced to 35.44 MB with LZMA2 compression
🐛 Fixed
- File Locking Issues: Implemented robust retry mechanisms for files in use
- Memory Leaks: Fixed memory leaks in long-running daemon processes
- Cross-Platform Compatibility: Resolved platform-specific path issues
- Dimension Calculation: Improved accuracy of ZPL dimension extraction
- Error Recovery: Better error handling with graceful degradation
- Encoding Issues: Fixed multi-language character encoding
- Docker Permissions: Fixed file permission issues in containers
🔐 Security
- Dependency Updates: Updated all dependencies to latest secure versions
- Non-Root Docker: Containers run as non-root user
zpl2pdf - Input Validation: Enhanced validation to prevent malicious ZPL code
- Environment Variables: Secure handling of sensitive configuration
- File Permissions: Proper permissions for daemon-created folders
🗑️ Removed
- Legacy Code: Removed old monolithic architecture
- Hardcoded Strings: Replaced with localization resources
- Duplicate Code: Eliminated 200+ lines of code duplication
- Temporary Files: Removed dependency on temporary file creation
ZPL2PDF - v1.0.0
MVP
#EN
🎉 First release of ZPL2PDF!
✅ Convert ZPL files to PDF easily
✅ Compatible with 203 dpi labels (example included in exemple_zpl.txt)
✅ Windows support:
- Installer (Setup.exe) → installs the program in "C:\Program Files\ZPL2PDF"
- Standalone binary (ZPL2PDF.exe) → just download and run, no .NET required
📖 How to use:
Open the terminal (PowerShell) and run:
ZPL2PDF.exe -i exemple_zpl.txt -n "output.pdf" -o .\
📦 Release contents:
- Setup.exe (program installer)
- ZPL2PDF.exe (portable version, no installation needed)
- exemple_zpl.txt (sample ZPL label)
#PT-BR
🎉 Primeira release do ZPL2PDF!
✅ Converter arquivos ZPL para PDF de forma simples
✅ Compatível com etiquetas 203 dpi (exemplo incluso em exemple_zpl.txt)
✅ Suporte para Windows:
- Instalador (Setup.exe) → instala o programa em "C:\Program Files\ZPL2PDF"
- Binário standalone (ZPL2PDF.exe) → basta baixar e executar, sem precisar do .NET instalado
📖 Como usar:
Abra o terminal (PowerShell) e execute:
ZPL2PDF.exe -i exemple_zpl.txt -n "saida.pdf" -o .\
📦 Conteúdo desta release:
- Setup.exe (instalador do programa)
- ZPL2PDF.exe (versão portátil, sem instalação)
- exemple_zpl.txt (exemplo de etiqueta ZPL)