Skip to content

Releases: brunoleocam/ZPL2PDF

v3.1.1

23 Mar 16:44

Choose a tag to compare

ZPL2PDF v3.1.1

🔧 Changed

  • Release layout: Release automation scripts live under release/scripts/; Linux package sources under scripts/release/packages/ (paths updated in docs and CONTRIBUTING.md).
  • Conversion pipeline: Shared Labelary PDF fallback path in ConversionService for 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; optional release/scripts/cleanup-installer-output.ps1 for installer/Output.
  • Docker build context: .dockerignore excludes non-essential trees (e.g. tests, docs, release, .cursor) for smaller/faster docker 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

v3.1.0

19 Mar 17:23

Choose a tag to compare

ZPL2PDF v3.1.0

✨ Added

  • --stdout (conversion mode): write the generated PDF to standard output (binary). With --stdout, -o is not required and no extra text is written to stdout.

🔧 Changed

  • Default output PDF name: if -n is omitted, the PDF name is derived from the input file stem (e.g. label.txtlabel.pdf); for -z, a timestamped ZPL2PDF_*.pdf name is used (no implicit output.pdf).
  • Linux packages: scripts/build-deb.sh and scripts/build-rpm.sh take VERSION from <Version> in ZPL2PDF.csproj instead 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: -u is required whenever -w / -h are set, including when the unit is mm (consistent validation).
  • Aztec ^B0: preprocess maps ^B0^BO so the offline viewer accepts Aztec barcodes (BinaryKits recognizes ^BO).

🙏 Acknowledgements



📦 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

v3.0.3

04 Mar 19:13
82f0984

Choose a tag to compare

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=false and 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
  • Custom fonts (--fonts-dir / --font): Fixed custom TTF/OTF fonts not being applied (e.g. ^AAN, ^ABN)

    • --fonts-dir and --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

02 Feb 16:58
366cfa4

Choose a tag to compare

ZPL2PDF v3.0.2

Fixed

  • Issue #45: Fixed duplicate or blank labels when ^XA appears inside or after ~DGR: payload
    • ^XA is only ignored when inside the base64 segment (:Z64:... up to the next :); ^XA after 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 printer
    • ZPL2PDF server stop — stop server (uses PID file zpl2pdf-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 / --web mode

    • Endpoints: POST /api/convert (ZPL to PDF or PNG), GET /api/health
    • Options: --host, --port (default 5000)

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

06 Jan 18:10
9f49709

Choose a tag to compare

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 ~DGR graphics 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 ~DGR command updates the graphic in memory
    • ^IDR cleanup commands properly remove graphics from memory
    • Each ^XGR command uses the most recent graphic data based on sequential state
    • Cleanup commands no longer generate blank pages in the PDF output
  • 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 ArgumentNullException checks in public methods for better error handling
  • Exception Handling: Improved exception handling in ConversionModeHandler with user-friendly error messages
  • Performance: Compiled regex patterns for better performance in IsCleanupCommandOnly method
  • Code Quality: Removed unused methods (ExtractGraphics, ExtractLabel, SaveImageToFile) from LabelRenderer
  • Robustness: Added protection against infinite loops in sequential processing logic

📦 Technical Details

Files Modified

  • src/Shared/LabelFileReader.cs - Sequential graphic processing implementation
  • src/Presentation/HelpDisplay.cs - Added missing help sections
  • src/Infrastructure/Rendering/LabelRenderer.cs - Code cleanup and validations
  • src/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:latest

Source Code

  • ZIP: Source code (zip)
  • TAR.GZ: Source code (tar.gz)

🔗 Links

🙏 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

18 Dec 20:56

Choose a tag to compare

🎉 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 .ttf and .otf files

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: MyLabel in ZPL
  • Forced Naming: Use ^FX !FileName: MyLabel to override -n parameter
  • Priority System: Clear priority order for filename resolution

Priority Order:

  1. ^FX !FileName: (forced) - Highest priority
  2. -n parameter (command line)
  3. ^FX FileName: (suggestion)
  4. 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 -help with 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 integration
  • src/Infrastructure/Rendering/RendererFactory.cs - Renderer selection logic
  • src/Infrastructure/Rendering/FallbackRenderer.cs - Auto mode with fallback
  • src/Infrastructure/TcpServer/TcpPrinterServer.cs - TCP server implementation
  • src/Infrastructure/TcpServer/TcpServerManager.cs - Server lifecycle management
  • src/Presentation/TcpServerModeHandler.cs - TCP server command handler
  • docs/LABELARY_API.md - Labelary API documentation
  • docs/ROADMAP.md - Future development roadmap
  • docs/MANUAL_TESTES_V3.md - Manual test guide

Modified Files

  • src/Shared/LabelFileReader.cs - Extended file extensions, forced filename support
  • src/Application/Services/ConversionService.cs - Renderer integration
  • src/Presentation/HelpDisplay.cs - New help sections
  • src/Shared/Localization/ResourceKeys.cs - New localization keys
  • All Resources/Messages.*.resx files - 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

  1. Test New Features: Try Labelary API for better quality rendering
  2. Explore TCP Server: Consider using virtual printer mode for integrations
  3. Update Scripts: No changes needed, but you can add --renderer parameter if desired

📚 Installation

Windows

Via Installer (Recommended)

# Download and run the installer
ZPL2PDF-Setup-3.0.0.exe

Via WinGet

winget install brunoleocam.ZPL2PDF

Via ZIP

# Extract the ZIP file
Expand-Archive ZPL2PDF-v3.0.0-win-x64.zip -DestinationPath C:\ZPL2PDF

Linux

Debian/Ubuntu (DEB)

sudo dpkg -i ZPL2PDF-v3.0.0-linux-amd64.deb
sudo apt-get install -f  # Install dependencies if needed

Fedora/CentOS (RPM Tarball)

tar -xzf ZPL2PDF-v3.0.0-linux-x64-rpm.tar.gz
# Manually install files to /usr/bin and /usr/share

Generic 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 labelary

2. Virtual Printer Integration

# Start TCP server for application integration
ZPL2PDF server start --port 9101 -o output/

# Applications can send ZPL directly to localhost:9101

3. Custom Font Labels

# Use custom fonts for branded labels
ZPL2PDF -i label.zpl -o output/ --fonts-dir ./font...
Read more

ZPL2PDF - v2.0.1

16 Dec 20:34
01f910d

Choose a tag to compare

ZPL2PDF v2.0.1

🐛 Bug Fixes

  • Docker/Linux CLI: Fixed font rendering issues in Alpine Linux Docker images. Added fontconfig, ttf-dejavu, ttf-liberation, and font-noto packages 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

07 Oct 20:40

Choose a tag to compare

🎉 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-language command for persistent settings
  • Environment Variable: ZPL2PDF_LANGUAGE support
  • Configuration File: Language setting in zpl2pdf.json
  • Localization System: Complete .resx resource files with LocalizationManager

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: .zpl files 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.ps1 and .sh
  • 8 Platform Builds: Single command builds all platforms
  • Automated Checksums: SHA256 for all builds
  • Release Automation: release.ps1 and .sh scripts
  • 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

25 Sep 18:24

Choose a tag to compare

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)