zplCore.comzplCore.com

Prüfen & Simulieren

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.

ZplCompliance.Check · zplcore comply

Live-Demo → Doku →

Scan-Proof

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.

ZplScanProof.Verify · zplcore verify

Live-Demo → Doku →

ZPL → editierbares Modell

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.

Label.FromZpl · zplcore import

Doku →

Etiketten verstehen & DSGVO-Schwärzung

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.

ZplExtract · ZplRedact · zplcore redact

Live-Demo → Doku →

GS1 Digital Link & Sunrise 2027

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.

ZplGs1Migration.Migrate · zplcore gs1 migrate

Live-Demo → Doku →

RFID Studio

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.

ZplRfid.EncodeEpc · zplcore rfid

Doku →

Printer Twin

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.

ZplPrinterTwin.Check · zplcore twin

Live-Demo → Doku →

Chaos-Drucker & Cutter

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.

ZplVirtualPrinter.Faults · zplcore serve --chaos

Live-Demo → Doku →

Testing+ & GitHub Action

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.Testing · zplcore check

Doku →

MCP-Server für Coding-Agenten

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.

claude mcp add zplcore -- zplcore-mcp

Doku →

PDF/SVG → natives ZPL

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.

VectorLift.Convert · zplcore lift

Doku →

NativeAOT-kompatibel

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).

dotnet publish -p:PublishProfile=aot

WindowsLinuxmacOSDockerRaspberry Pi

Doku →

Compliance-Pre-Check: Palettenetikett mit markierten Befunden ZPL3104 und ZPL3110
Compliance: Befunde direkt am Etikett
Produktetikett nach der Sunrise-Migration: EAN-13 plus QR-Code mit GS1 Digital Link
Sunrise 2027: QR-Code mit Digital Link ergänzt
Printer Twin: 4×6-Zoll-Etikett auf einem 72-mm-Druckkopf, abgeschnittener Bereich rot schraffiert
Printer Twin: was ein 72-mm-Druckkopf abschneidet
Cutter-Vorschau: sechs Etiketten mit Schnittlinien nach Etikett 3 und 6
Cutter: Schnitt nach Etikett 3 und 6

Echte Ausgaben der Engine, erzeugt aus den Beispielen der Dokumentation.

Quality Gates

Etiketten testen, bevor sie live gehen

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.

  1. Git
    Commit

    Vorlage in Git geändert

  2. Gate
    Pull Request

    Vorher-, Nachher- und Diff-Bilder im PR-Kommentar, Befunde als SARIF in Code Scanning

  3. Gate
    CI-Pipeline

    zplcore check mit JUnit-XML und SARIF; Exit-Code 1 stoppt den Build

  4. Gate
    Container-Build

    Prüf-Stufe im Dockerfile: Kein Image entsteht mit einer kaputten Vorlage

  5. Staging

    Virtueller Drucker mit Cutter und RFID: Schnitte, EPCs und VOID wie am echten Gerät

  6. 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
  • DruckerpassungPrinter Twin: Druckkopfbreite, Optionen, Firmware, Fonts
  • 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ürzt
PASS 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

Unit-TestxUnit · NUnit · MSTest

[Fact]
public void Versandetikett_ist_druck_und_scanfest()
{
    ZplAssert.LabelFile("templates/dhl-100x150.zpl")
        .NoOverlaps().NoClipping()
        .Complies(CompliancePacks.Gs1LogisticLabel)
        .FitsPrinter(PrinterProfiles.Get("ZD421d-203"))
        .Barcode("SSCC").Decodes("(00)390012340047110001")
        .HasGrade(atLeast: 'B');
}

Wo geschnitten wird und was auf den Tag kommt

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. 1…0000
  2. 2…0000
  3. 3…0000
  4. 4…0000
  5. 5…0000
  6. 6…0000
  • bestandenSchnitt nach Etikett 3 und 6 (^MMC, ^PQ6,3)
  • Gate gestopptZPL3909: 6 Etiketten, 6-mal derselbe EPC 3156…8000000, das Gate stoppt
  • bestandenKorrigiert: 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 schneidet
var 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.