Wissen, dass es druckt und scannt, bevor es druckt
Rendern ist erst der Anfang. zplCore.com prüft Etiketten gegen GS1- und Carrier-Regeln, liest jeden Barcode zurück, simuliert Drucker samt Fehlern und macht Etiketten testbar wie Code. Alles offline, im eigenen Prozess und in der CI.
Compliance-Pre-Check
84 Regeln in 8 Paketen: GS1-Logistiketikett, Sunrise 2027, Amazon FBA, UPS, FedEx, DHL Paket, UDI und RFID. Gemessen am gerenderten Etikett (X-Dimension, Ruhezonen, Klarschrift, AI-Formate, Prüfziffern), jeder Fund mit Zeile, Position und Quelle, als JSON, SARIF oder markiertes PNG. Eine Vorprüfung, keine Zertifizierung.
Jeder Barcode wird aus dem gerenderten Bild mit zwei unabhängigen Decodern zurückgelesen und mit den Solldaten verglichen. X-Dimension, Ruhezonen, Höhe und Überlappungen werden vermessen, dazu eine Note A–F als digitaler Vorab-Check nach dem Vorbild von ISO/IEC 15415/15416. Ein Prüfgerät am gedruckten Etikett ersetzt das nicht.
Bestehendes ZPL wird zur datengebundenen Vorlage: Text, Barcodes, Formen, Bilder und RFID als typisierte Elemente, ^FN-Felder als Datenfelder. Jedes Element wird pixelweise gegengeprüft; alle 318 Dateien des Testkorpus kommen pixelgleich zurück.
Liest Empfänger, Absender, Sendungsnummern mit Prüfziffer, SSCC, GTIN, Daten und Gewichte aus dem ZPL, mit Fundstelle und Konfidenz. Die Schwärzung ersetzt personenbezogene Daten im gleichen Layout, auch in Kommentaren und 2D-Codes, und sucht danach erneut. Regelbasiert, ohne Netzwerk; vor der Weitergabe bitte prüfen.
Findet die GTIN in EAN/UPC, GS1-128, ITF-14 oder DataBar und ergänzt im freien Platz einen QR-Code mit GS1-Digital-Link-URI oder einen GS1 DataMatrix, mit Ruhezone und Sunrise-Vorprüfung. Digital-Link-URIs bauen und parsen nach URI Syntax 1.7.0.
EPCs kodieren und dekodieren nach GS1 EPC Tag Data Standard 2.3 (SGTIN, SSCC, SGLN, GRAI, GIAI und die TDS-2.0-Plus-Schemata) samt passender ^RF-Befehle. Prüft, ob der Tag dieselbe SSCC oder GTIN trägt wie das gedruckte Etikett.
Druckt dieses Etikett auf diesem Modell? 24 Geräteprofile (u. a. ZD421, ZD621, ZT411, ZT610, ZQ630*) melden Felder außerhalb der Druckkopfbreite, fehlende Optionen wie Cutter oder RFID, Firmware-Grenzen, Fonts und Speicher, dazu eine Druckzeitschätzung. Jede Profilangabe ist mit Quelle belegt oder als unbekannt markiert.
Der virtuelle Drucker auf TCP 9100 fällt auf Wunsch aus: Papier oder Farbband leer, Kopf offen, Verbindungsabbruch, Timeout, per Skript und reproduzierbar. ~HS und ~HQES antworten wie ein Drucker. Die Cutter-Simulation zeigt, nach welchen Etiketten geschnitten wird, mit Schnittlinien in PNG, SVG und PDF.
Etiketten testen wie Code: ZplAssert.Label(zpl) prüft, ob der SSCC-Barcode die erwarteten Daten liefert, dazu Überlappung, Clipping, Compliance, Druckerprofil, Pixel- und Semantik-Snapshots. Fehler nennen Element, Position und ZPL-Zeile. zplcore check und eine GitHub Action kommentieren Pull Requests mit Vorher/Nachher-Bildern.
zplcore-mcp gibt Claude Code, Claude Desktop, VS Code und Cursor 26 Werkzeuge: rendern, linten, Compliance, Scan-Proof, Schwärzen, Printer Twin und mehr. Nur stdio, kein Netzwerk-Port; jeder Aufruf läuft in einem eigenen Worker-Prozess mit Zeit- und Speicherlimit, ohne Zugriff auf Dateien und Netz.
Vector-Lift macht aus Carrier- und ERP-PDFs oder SVGs echtes ZPL statt eines ^GF-Rasterbilds: Text als ^A0-Felder, Barcodes neu erzeugt und gegengelesen, Linien und Rahmen als ^GB/^GC/^GE. Mit gemessener Übereinstimmung je Etikett und Element.
SDK, Testing-Paket, CLI und MCP-Server bauen ohne Trim- und AOT-Warnungen. Als NativeAOT-Container auf runtime-deps:10.0-noble-chiseled-extra (~79–105 MB) startet alles ohne .NET-Laufzeit – geprüft auf macOS, Linux (arm64/x64) und als lokaler Labelprint-Server auf einer Synology DS923+ (793/793 Ausgaben identisch zur JIT-Version, 24 % schneller).
Compliance: Befunde direkt am EtikettSunrise 2027: QR-Code mit Digital Link ergänztPrinter Twin: was ein 72-mm-Druckkopf abschneidetCutter: Schnitt nach Etikett 3 und 6
Echte Ausgaben der Engine, erzeugt aus den Beispielen der Dokumentation.
Eine kaputte Vorlage, die erst im Betrieb auffällt, wird teuer: Barcodes, die an der Rampe nicht scannen, Linien, die stehen, Sendungen, die der Carrier zurückweist, und Fehlerwellen über alle Standorte. zplCore prüft jede Vorlage dort, wo sie entsteht: im Commit, im Pull Request, in der Pipeline und schon beim Container-Build.
Commit
Vorlage in Git geändert
Gate
Pull Request
Vorher-, Nachher- und Diff-Bilder im PR-Kommentar, Befunde als SARIF in Code Scanning
Gate
CI-Pipeline
zplcore check mit JUnit-XML und SARIF; Exit-Code 1 stoppt den Build
Gate
Container-Build
Prüf-Stufe im Dockerfile: Kein Image entsteht mit einer kaputten Vorlage
Staging
Virtueller Drucker mit Cutter und RFID: Schnitte, EPCs und VOID wie am echten Gerät
Produktion
Nur geprüfte und freigegebene Vorlagen
Was die Gates prüfen
Compliance84 Regeln in 8 Paketen, z. B. GS1-Logistik und DHL Paket
Scan-Proofjeder Barcode zurückgelesen, Mindestnote per --min-grade
SnapshotsPixel plus Semantik: was sich geändert hat, nicht nur wie viel
Layout & InhaltÜberlappungen, abgeschnittene Elemente, Felder, Texte, Anzahl der Etiketten
Basis-Vergleich--baseline: was der PR an Daten und Positionen ändert
Schnittewo der Cutter schneidet: ^MM, ^PQ, ~JK, ^CN
RFIDwelcher EPC auf welchen Tag kommt, passend zum gedruckten Barcode
So sieht ein gestopptes Gate aus
# echte Ausgabe, gekürztPASS templates/dhl-100x150.zpl
FAIL templates/express-100x150.zpl
FAIL comply gs1-logistic
:38:1 error ZPL3104 X-dimension 0.375 mm < 0.495 mm
:38:1 error ZPL3105 bar height 13.0 mm < 31.75 mm
FAIL scan-proof
:32:1 error ZT1301 QR Code grade D, required B
ok printer ZD421d (ZD421d-203)
FAILED (fail-on error) · exit 1
Automatisch prüfen, mit KI erklären
Die Gates entscheiden deterministisch: gleiche Vorlage, gleiches Ergebnis, Exit-Code 0 oder 1.
Ein Coding-Agent (Claude Code, GitHub Copilot, Cursor) prüft Änderungen über zplcore-mcp, erklärt die Befunde und schlägt die Korrektur als Commit vor.
Die Freigabe bleibt bei Ihnen, z. B. mit Pflicht-Reviewern für Etikettenänderungen über CODEOWNERS und Branch-Schutz.
Auch in Azure DevOps, GitLab CI oder Jenkins: CLI, Exit-Codes und JUnit-XML.
MCP-Werkzeuge:complyverifyprinter_checkrenderdiff
CI-Gatejede Pipeline
# Exit-Code 1 bei Fehlern, Berichte für die Pipeline
zplcore check templates/ --pack gs1-logistic \
--verify --min-grade B --printer ZD421d-203 \
--junit out/labels.junit.xml --sarif out/labels.sarif
Gate im Container-BuildDockerfile
# Build-Stufe: Vorlagen prüfen, bevor ein Image entsteht
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS label-gate
WORKDIR /src
COPY nuget.config ./
COPY .config/ .config/
COPY templates/ templates/
RUN dotnet tool restore \
&& dotnet zplcore check templates/ --pack gs1-logistic \
--verify --min-grade B --printer ZD421d-203
FROM mcr.microsoft.com/dotnet/aspnet:10.0
# nur geprüfte Vorlagen landen im Image
COPY --from=label-gate /src/templates /app/templates
Eine kleine Änderung an ^MM oder ^PQ schneidet plötzlich jedes Etikett oder gar keins; ein festes ^RF schreibt denselben EPC auf jede Kopie. Beides fällt sonst erst an der Linie auf. Im Gate steht es vorher fest.
1…0000
2…0000
3…0000
4…0000
5…0000
6…0000
Schnitt nach Etikett 3 und 6 (^MMC, ^PQ6,3)
ZPL3909: 6 Etiketten, 6-mal derselbe EPC 3156…8000000, das Gate stoppt
Korrigiert: ein Format pro Palette, EPC = gedruckter SSCC (00)390012340047110001
Echte Ausgaben: virtueller Drucker (zplcore serve --rfid) und RFID-Prüfung. Auch geprüft: EPC passt zum Barcode (ZPL3904), Speicherbank und PC-Bits, ^RS/^HV, Sperren ohne Passwort.
// Schnitte: wo der Cutter schneidetvar plan = ZplCutPlan.Analyze(zpl);
Assert.Equal([2, 5], plan.CutAfter); // nach Etikett 3 und 6
Assert.Empty(plan.Diagnostics);
// RFID: EPC passt zum Barcode, kein EPC doppelt
ZplAssert.Label(zpl)
.Complies(CompliancePacks.Rfid)
.FitsPrinter(PrinterProfiles.Get("ZT411-203")
.WithOptions(PrinterOption.Cutter | PrinterOption.Rfid)
.AsPrinterFit());
# CI: RFID-Paket im Gate, EPC je Etikett anzeigen
zplcore check templates/ --pack gs1-logistic,rfid
zplcore rfid simulate templates/palette.zpl
# Staging: Drucker mit Cutter und RFID simulieren
zplcore serve --profile ZT411-203 --option cutter,rfid \
--rfid --cut-marks
Heute im SDK: ZplCore.Testing, zplcore check und zplcore-mcp. Die GitHub Action liegt im Lieferumfang (tools/github-action); die Veröffentlichung im Marketplace als zplcore/label-check ist vorgesehen. Compliance und Note sind Vorprüfungen, keine Zertifizierung.