CloudToBrowserPrint
zplcloud2print: lokaler HTTP/HTTPS-Druckdienst (127.0.0.1:9100 / 9101) für Windows, macOS, Linux und Raspberry Pi. Webseiten rufen ihn per JavaScript auf, um Drucker zu finden und ZPL, Dateien und URLs zu drucken. JSPM-kompatibles Request-Modell.
Funktionen
- Geräteerkennung - Windows-Spooler, CUPS (Linux/macOS), Netzwerk (TCP 9100), Bluetooth SPP.
- Drucken - Roh-ZPL, URLs, Blobs aus dem Browser (multipart); mehrere Jobs je Request.
- Konvertierung - PDF, Office (DOC/DOCX/XLS/XLSX über LibreOffice), Bilder (TIF/JPG/PNG/GIF/…) und TXT → ZPL (
^GF), optional direkt drucken. - Barcode-Decoding - Bild →
{type, data}(ZBar; macOS: Apple Vision). - Bidi - TCP, seriell (COM/TTY), Bluetooth, Parallelport (LPT), IPP (RFC 2911); sessionbasiert.
- Print-Server-Modus - alle Funktionen über einen SignalR-WebSocket (
/hubs/print) ohne HTTP-Polling. - Job-Trace - jede Operation mit
queued → printing → ok | failed, Bytes, Fehlern, Zeiten; live per SignalR.
Demo-Seite: zplcloud.com/cloudtobrowserprint (Verbindungsarten, Hub-Status, Job-Trace, Netzwerkdrucker-Verwaltung).
Installation
Der Installer erkennt Betriebssystem und Architektur und lädt das Binary von https://zplcloud.com/downloads/.
macOS / Linux / Raspberry Pi
Ziele: osx-x64, osx-arm64, linux-x64, linux-arm64, linux-arm. Der Installer schreibt eine Standard-printers.json und installiert das HTTPS-Zertifikat (macOS Login-Keychain; Linux NSS-DB für Chrome/Chromium/Firefox; ohne sudo). Überspringen mit ZPLCLOUD_NO_CERT=1.
Windows (PowerShell, ohne Admin)
Installiert nach %LOCALAPPDATA%\zplcloud2print\zplcloud2print.exe, ergänzt das Verzeichnis im Benutzer-PATH. Ziele: win-x64, win-x86, win-arm64.
Start
Das Start-Banner zeigt Version, Build-Datum, Debug-/Log-Status und den wirksamen printers.json-Pfad. Ist ein Port belegt, wird der haltende Prozess benannt (Windows GetExtendedTcpTable, Linux ss -ltnp, macOS lsof -nP).
Dienstmodus
| System | Mechanismus | Start |
|---|---|---|
| Linux / Raspberry Pi | systemd-Unit zplcloud2print.service (Restart=always, RestartSec=5) | beim Booten (sudo nötig, wird automatisch erkannt) |
| macOS | launchd LaunchAgent ~/Library/LaunchAgents/com.zplcloud.cloudtobrowserprint.plist (KeepAlive=true) | beim Login, ohne Admin |
| Windows | geplante Aufgabe zplcloud2print (schtasks ONLOGON, /RL LIMITED) | beim Login, ohne Admin |
Plattform-Matrix
| Funktion | Windows | macOS | Raspberry Pi (arm) | Linux x64 |
|---|---|---|---|---|
PDF → ZPL (^GF) | PDFium | PDFium | PDFium | PDFium |
| Bilder (TIF/JPG/PNG/GIF/…) → ZPL | FreeImage | FreeImage | FreeImage | FreeImage |
| Office (DOC/DOCX/XLS/XLSX) → PDF → ZPL | LibreOffice | LibreOffice | LibreOffice | LibreOffice |
| Barcode-Decoding | ZBar | Apple Vision | ZBar | ZBar |
| Druck: installierte Drucker (Spooler) | winspool | – | – | – |
| Druck: CUPS | – | lp -d … -o raw | ✓ | ✓ |
| Druck: Netzwerk (Raw TCP 9100) | ✓ | ✓ | ✓ | ✓ |
| Druck: Bluetooth (SPP) | ✓ | ✓ | ✓ | ✓ |
| Bidi: seriell (COM/TTY) | ✓ | ✓ | ✓ | ✓ |
| Bidi: Parallelport (LPT) | ✓ | – | – | – |
| IPP (RFC 2911) | ✓ | ✓ | ✓ | ✓ |
| HTTPS-Zertifikat (Trust Store) | Store | Keychain | NSS | NSS |
| Dienstmodus | schtasks | launchd | systemd | systemd |
Auf echter Hardware geprüft: Windows, macOS arm64, Raspberry Pi armhf, Linux x64.
HTTP-API (lokal)
| Endpunkt | Methode | Beschreibung |
|---|---|---|
| /available?types=… | GET | Geräteliste; Filter network,usb,driver,cups,bluetooth (BT-Scan nur auf Anfrage). |
| /write | POST | Senden: {device, data} | {device, url} | multipart json + blob. |
| /read | POST | Vom Drucker lesen (Netzwerk/BT mit Rückkanal). |
| /convert | POST | Datei → ZPL; mit device + action:"print" = konvertieren und drucken. |
| POST | Mehrere Jobs: {jobs:[{device, data|url}]}. | |
| /decode | POST | Bild → {barcodes:[{type,data}]}. |
| /comm/tcp · /comm/serial/… · /comm/bt/… · /comm/parallel | POST | Bidi-Sessions. |
| /ipp | POST | IPP-Druckjob (RFC 2911). |
| /jobs · /jobs/{id} | GET | Job-Trace (Status, Bytes, Fehler, Zeiten). |
| /config/printers | GET | Konfigurierte Netzwerkdrucker (printers.json). |
| /config/printers | POST | Hinzufügen: {host, port?, name?} → {ok, message, printers}. |
| /config/printers/remove | POST | Entfernen per Host oder Name: {hostOrName} → {ok, message, printers}. |
| /hubs/print | SignalR | Print-Server-Modus: alle Funktionen über WebSocket, Live-Job-Trace. |
Web-Client (zplcloud2print.min.js)
Eine minifizierte Datei, SignalR eingebettet, Promise-API.
Port-Override: ?zbpPort=19200 in der Seiten-URL. onPendingChange(cb) meldet laufende Operationen (Loader-Status).
printers.json
Wird zuerst neben dem Binary gelesen, sonst im Benutzerordner; Änderungen werden live übernommen. Enthält Netzwerkdrucker, allowedOrigins (andere Origins erhalten 403; localhost, file:// und curl sind immer erlaubt), Proxy-Einstellungen und optionale Watcher.
- Windows:
%LOCALAPPDATA%\zplcloud2print\printers.json - macOS:
~/Library/Application Support/zplcloud2print/printers.json - Linux / Raspberry Pi:
~/.config/zplcloud2print/printers.json(oder$XDG_CONFIG_HOME)