zplCore.comzplCore.com

zplCore.com · High Performance .NET Labelprint Engine

.NET 10 · ZPL II · EPL2 · Barcodes

Etiketten erstellen, prüfen und drucken. Mit einer einzigen Bibliothek.

zplCore.com ist das ZPL-SDK für .NET und C#: Etiketten aus Vorlagen und Daten als ZPL erstellen, ZPL II und EPL2 wie ein virtueller Zebra-Drucker als PNG oder PDF prüfen und an den Drucker senden. 144 Barcode-Symbologien sind eingebaut. Läuft unter Windows, Linux und macOS, ohne Druckertreiber.

zplCloud.comDie Label-Cloud-Plattform auf Basis von zplCore →

Alle Tools auf zplCloud.com → ZPL → PDF/PNG, PDF/Bild → ZPL, Linter, Barcode-Prüfung

kompatibel mit ZPL II für Zebra®-Drucker*PNG · PDF · TIFF · PCL · ESC/POSSQL Server · PostgreSQL · MongoDB · EF Core
4×6-Zoll-Versandetikett mit invertiertem Kopf, Routing-Code, Code 128, Data Matrix, PDF417 und SSCC, gerendert mit ZplCore
200.000+ Labels/sskaliert mit der Hardware
144Barcode-Symbologien
Cloud-readyContainer & ClusterWindowsLinuxmacOSDockerKubernetesRaspberry Pi

gerendert mit zplCore.com · PNG

Auf einen Blick

ZPL II & EPL2Vorschau und Konvertierung
144 Symbologieninklusive GS1-Validierung
PNG · PDF · TIFF · PCLESC/POS · GIF · HTML · EPS
Windows · Linux · macOSohne Druckertreiber
.NET 10 · NuGet · CLIDockerfile + Helm-Chart
Pixelgenau geprüftØ 0,986 gegen Referenzen, 169 Fälle

Funktionen

Alles, was zwischen Daten und Etikett passiert

Erstellen

Vorlage + Daten (C#-Objekte, JSON, EF Core) → ZPL

Barcode-Generator

144 Symbologien, von Code 128 über GS1 DataBar und QR bis MaxiCode, DotCode und Han Xin. Ausgabe als PNG, SVG, PDF, EPS oder ^GFA. GS1-Validierung inklusive.

Label-Modell

Text, Barcode, Tabelle, Bild, RFID in mm oder Zoll. Ausdrücke mit Element-Referenzen, Validierung, AutoFit, Duplex mit Vorder- und Rückseite. Mehrsprachige Vorlagen mit {t:key} und Kultur pro Druckauftrag. Speichern und Laden als JSON-Vorlage.

Datenbindung

label.For<T>() bindet C#-Objekte, EF-Core-Abfragen und MongoDB- oder LiteDB-Dokumente per LINQ. Dazu JSON (JsonElement) und dynamische Datensätze. Streaming mit konstantem Speicher, asynchron in Stream und PipeWriter.

ZPL-Optimierer

Verkleinert ZPL ohne Pixeländerung: entfernt redundante Befehle und Standardparameter und komprimiert Grafiken neu (Hex, ACS, Z64). Pixelgleich geprüft am gesamten Referenzkorpus.

DPI-Umrechnung

ZplRescaler rechnet Roh-ZPL zwischen 203, 300 und 600 dpi um. ZplGraphicEncoder kodiert Bilder als Hex, ACS, Z64 oder B64 mit 5 Dithering-Verfahren.

Vorschau & Emulation

ZPL/EPL → PNG, PDF, SVG wie ein virtueller Zebra-Drucker

ZPL-II-Renderer

Ausgabe als PNG, JPEG, WebP, BMP, GIF, PDF, GRF, HTML, EPS, TIFF (CCITT G3/G4, LZW, Deflate, PackBits, mehrseitig), PCL (mono, grau, farbig) und ESC/POS mit NV-Logos. Gespeicherte Formate mit ^DF/^XF, Grafiken, Barcodes, Fonts.

Vektor-Ausgabe

Ganze Labels als SVG und PDF in Vektorform: Text als Glyphen-Umrisse, Barcodes und Rahmen als Pfade, Grafiken als 1-Bit-Bilder. Jedes SVG-Element trägt seine Position im ZPL-Quelltext. Rückgerastert stimmt die Ausgabe mit dem PNG überein (Mittelwert 1,000 bei 2 Dots Toleranz, 126 Labels).

EPL2-Renderer

EPL2 läuft durch dieselbe Engine. ToZpl() konvertiert bestehende EPL-Formulare nach ZPL.

Diagnose & Quellbezug

Strukturierte Diagnosen mit stabilen Codes. Jedes gerenderte Element kennt seine Position im ZPL-Quelltext und lässt sich als JSON ausgeben. Schutzgrenzen für fremdes ZPL.

Geprüfte Genauigkeit

Automatisierter Pixelvergleich gegen druckergenaue Referenzrenderings, im Mittel 0,986 über 169 Testfälle. QR-Codes (^BQ, Modell 2) sind modulgleich mit dem Zebra-Druckbild – Moduswahl, Version, Fehlerkorrektur und Maske, geprüft an über 3.600 Labelary-Referenzsymbolen. QR-Modell 1 wird als Modell 2 ausgegeben. Barcode-Encoder sind bit-genau gegen bwip-js geprüft.

Weltschriften

HarfBuzz-Shaping und Bidi für Arabisch, Hebräisch, Thai, indische Schriften und CJK.

Drucken

TCP 9100, USB, Windows-Spooler, CUPS, virtueller Drucker

Druckaufträge

Start-Label, Datensätze, End-Label und Schnitt nach dem letzten Etikett in einem Job. Transport über TCP 9100, seriell, USB, Windows-Spooler oder CUPS. ^MM/^MN/^MT, erweiterter ~HQ-Status, Probelauf.

Virtueller Drucker

ZplVirtualPrinter lauscht auf TCP 9100, rendert eingehende Druckjobs und antwortet auf Statusabfragen. Testen ohne Hardware, auf Wunsch mit simulierten Druckerfehlern und Cutter.

Kommandozeile

Das dotnet-Tool zplcore rendert, konvertiert EPL nach ZPL, druckt, erzeugt Barcodes, formatiert und vergleicht ZPL, prüft Etiketten (comply, verify, check) und schwärzt personenbezogene Daten.

TrueType-Fonts

TTF-Schriften gehen über ~DY in den Druckerspeicher oder werden als Grafik gedruckt (PrintAsGraphic).

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.

Plattformen & Cloud

Läuft überall, wo Ihr Backend läuft

Ein .NET-10-SDK ohne Druckertreiber, das Sie mit dotnet publish wie jede andere Abhängigkeit ausliefern: unter Windows, Linux und macOS, im IIS, in Docker-Containern und im Kubernetes-Cluster, on-premises oder in der Cloud wie Azure und AWS.

  • Windows
  • Linux
  • macOS
  • Docker
  • Kubernetes
  • Raspberry Pi
  • Synology NAS
  • IIS
  • Azure
  • AWS
GeprüftWindowsLinuxmacOS

Windows · Linux · macOS

Eine .NET-10-Assembly auf Basis von SkiaSharp und HarfBuzz. Die automatisierten Tests laufen auf Windows 11, macOS und Linux grün. Kein Druckertreiber und kein GUI nötig.

Cloud & EdgeDockerKubernetesLinuxRaspberry Pi

Container, NAS & Pi

Getestet in den .NET-Images für Debian, Ubuntu Chiseled und Azure Linux 3.0 (Distroless & NativeAOT). Selbst ein vorhandenes NAS wie eine Synology DS923+ (Container Manager) oder ein Raspberry Pi wird damit ohne Zusatzpakete zum lokalen Labelprint-Server.

Beispiel

Minimal-API-Beispiel

ASP.NET-Core-Beispiel mit Streaming-Endpunkten, einer begrenzten Queue (Channel + BackgroundService) und parallelen Workern.

Docker & Kubernetes: Dockerfile und Helm-Chart im Lieferumfang

  • Alle Tests laufen grün in den offiziellen .NET-10-Container-Images für Debian, Ubuntu 24.04 Chiseled und Azure Linux 3.0.
  • Dockerfile.server im Lieferumfang: Distroless-Image, läuft ohne Root-Rechte, mit /health-Endpunkt (oder als NativeAOT auf runtime-deps:10.0-noble-chiseled-extra ab ~79 MB).
  • Helm-Chart für Kubernetes im Lieferumfang. Das Image bauen Sie selbst, es liegt in keiner öffentlichen Registry.
  • Keine zusätzlichen Systempakete nötig, die nativen Bibliotheken bringt das NuGet-Paket mit.
  • Macht aus einem vorhandenen NAS (z. B. Synology DS923+ über den Container Manager, ~90 MiB RAM, 295 PNG-Labels/s mit NativeAOT) oder einem Raspberry Pi sofort einen lokalen Labelprint-Server im Lager.
  • Asynchrones ASP.NET-Core-Minimal-API-Beispiel mit Job-Queue (199.000 Labels/s ZPL-Erzeugung auf einem Mac).
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish samples/WebApiDemo -c Release -o /app

FROM mcr.microsoft.com/dotnet/aspnet:10.0-azurelinux3.0-distroless
WORKDIR /app
COPY --from=build /app .
ENTRYPOINT ["dotnet","WebApiDemo.dll"]

Performance

Schnell genug für den Versandschluss um 18 Uhr

Alle Zahlen sind gemessen, nicht geschätzt: Release-Build, .NET 10, Apple M3 Max (10 Performance- + 4 Effizienzkerne). Die Benchmarks liegen im Repository bei.

199.000Labels/s ZPLgespeichertes Format, 100.000 Labels in einem Job (LiteDB → Datei: 0,50 s)
5.022PNG-Renderings/s10 Threads, Rendern + PNG, 9,2× gegenüber 1 Thread
24,8 s100.000 PNG-Vorschauenparallel auf 14 Kernen, 4.033 Labels/s (sequenziell 3,4 min)
1 Mio.Labels ohne LeckSpeicher bleibt flach, GC-Heap 2–3 MB

Ein Druckauftrag: Start-Label + 100.000 Sendungs-Labels + End-Label, Schnitt nur nach dem letzten Label. 14 Kerne, samples/PerfTest.

SzenarioZeitLabels/sGrößeSpeicher (Heap)
Objekte → ZPL, gespeichertes Format (^DF/^XF)0,73 s136.00014,7 MB24 MB
Objekte → ZPL, volles Format je Label0,39 s256.00029,1 MB24 MB
EF Core / SQLite AsAsyncEnumerable() → Datei0,57 s176.00014,7 MB29 MB
LiteDB-Query → Datei0,50 s202.00014,7 MB64 MB
PNG-Vorschau sequenziell (799 × 480 px, Graustufen)3,4 min49018,2 MB / 2.00084 MB
PNG-Vorschau parallel (14 Kerne)24,8 s4.03317,1 MB / 2.000106 MB

Die ZPL-Erzeugung ist praktisch kostenlos und streamt mit konstantem Speicher. Das gespeicherte Format halbiert die Datenmenge zum Drucker (14,7 statt 29,1 MB).

Methodik & Edge/NAS-Container

Release-Build, .NET 10, Apple M3 Max (10 Performance- + 4 Effizienzkerne). Zusätzlich als NativeAOT-Container (runtime-deps:10.0-noble-chiseled-extra, ~79 MB) auf einem Synology DS923+ NAS (AMD Ryzen R1600, 2 Kerne / 4 Threads) gemessen: 237.428 Labels/s Parsen, 1.233 Labels/s Bitmap-Rendern und 295 PNG-Labels/s (> 17.500 PNGs/min). Alle Messungen lassen sich mit einem Befehl wiederholen.

# 100.000-Label-Druckauftrag
dotnet run -c Release --project samples/PerfTest -- 100000
# Thread-Skalierung (label|text|barcode|box|empty)
dotnet run -c Release --project samples/RenderBench -- 150 scale

Datenquellen

Jede Datenquelle, die C#-Objekte liefert

Die Datenbindung arbeitet mit jedem IEnumerable<T>, IQueryable<T> oder IAsyncEnumerable<T>. Filter und Sortierung laufen in der Datenbank, die Etiketten werden gestreamt. Damit funktionieren alle EF-Core-Provider und jeder Datenbank-Treiber mit LINQ.

Alles, was C# lesen kann

über EF Core, offizielle .NET-Treiber oder eigene Objekte

  • Microsoft SQL Server
  • Azure SQL
  • PostgreSQL
  • MySQL
  • MariaDB
  • Oracle
  • SQLite
  • MongoDB
  • Azure Cosmos DB
  • SAP HANA
  • IBM Db2 / Informix
  • Couchbase
  • Firebird
  • Amazon DynamoDB
  • RavenDB
  • Elasticsearch
  • OpenSearch
  • LiteDB
  • Dapper / ADO.NET
  • Entity Framework Core
  • C#-Objekte / LINQ
  • JSON

Beispiel: Logistik-Druckauftrag → Zwölf Sendungen aus SQLite, per EF Core in einen Druckauftrag

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.

KI & AutomationMCP

Ihr KI-Agent entwirft, prüft und korrigiert Etiketten selbst

Mit dem MCP-Server zplcore-mcp arbeiten KI-Agenten wie Claude Code, Claude Desktop, GitHub Copilot in VS Code und Cursor direkt mit der zplCore-Engine: ZPL schreiben, rendern, Prüfbericht lesen, korrigieren, so lange, bis das Etikett stimmt. Offline, auf Ihrem Rechner, über das Model Context Protocol.

Agent ↔ zplcore-mcp

Erstelle für diese Sendung ein GS1-Versandetikett 100 × 150 mm und prüf es gegen die GS1-Logistikregeln.

  1. erfolgreichlint0 Diagnosen
  2. Fehler gefundencomplygs1-logistic2 Fehler · 11 HinweiseZPL3104 SSCC: X-Dimension 0,375 mm < 0,495 mm · ZPL3105 Balkenhöhe 13 mm < 31,75 mm
  3. Agent: SSCC-Barcode auf ^BY4 und 270 Dots Höhe, Schrift ab 3 mm, Layout angepasst.
  4. erfolgreichcomplygs1-logistic0 Fehler · 0 Warnungen · 0 Hinweise
  5. erfolgreichverify3 von 3 Barcodes gelesen · Note A
  6. erfolgreichrenderPNG · 100 × 150 mm · 203 dpi
Von zplCore gerendertes GS1-Versandetikett 100 × 150 mm mit Empfänger, Routing, QR-Code, Sendungsnummer und SSCC-Barcode
Fertig.

0 Fehler · alle Barcodes Note A

GS1-128 (SSCC), Code 128, QR-Code

Beispielablauf, gekürzt. Etikett, Befunde und Noten sind echte Ergebnisse der Engine; eine Vorprüfung, keine Zertifizierung.
26Werkzeuge
stdiokein Netzwerk-Port
offlineohne Cloud-Dienst

26 Werkzeuge für Agenten

Erstellen
  • render
  • fill_template
  • format
  • convert_epl
  • import_label
  • lift_svg
Prüfen & Simulieren
  • lint
  • diff
  • comply
  • verify
  • printer_profiles
  • printer_check
  • print_estimate
  • cut_plan
Daten, GS1 & RFID
  • extract
  • redact
  • gs1_link_build
  • gs1_link_parse
  • gs1_migrate
  • rfid_encode
  • rfid_decode
  • rfid_check
Nachschlagen
  • list_symbologies
  • describe_symbology
  • explain_command
  • get_limits

Läuft mit

  • Claude Code
  • Claude Desktop
  • VS Code · GitHub Copilot
  • Cursor

Für fremde Eingaben gebaut

  • Nur stdio, kein Netzwerk-Port; jeder Aufruf in einem eigenen Worker-Prozess mit Zeit- und Speicherlimit
  • Kein Zugriff auf Dateien, Netzwerk, Shell oder Umgebungsvariablen; unter macOS zusätzlich in der sandbox-exec-Sandbox
  • Texte aus dem Etikett werden als nicht vertrauenswürdige Daten markiert; abgesichert mit Adversarial- und Fuzz-Tests
  • Automatisierung ohne KI: dieselben Prüfungen in der CI mit zplcore check und der GitHub Action
# Claude Code: Server im aktuellen Projekt eintragen
claude mcp add zplcore -- zplcore-mcp

zplcore-mcp ist im SDK als dotnet-Tool enthalten (.NET 10). Installation und die Konfiguration für Claude Desktop, VS Code und Cursor stehen in der Doku.

zplCore Server · DockerDemnächst

Vorlage und Daten rein, Etikett raus. Als Container.

Der zplCore Server soll die Engine als fertigen Container bereitstellen: Die Vorlagen liegen beim Server, Ihre Anwendung schickt nur noch die Daten (oder der Server holt sie über eine benannte Abfrage selbst) und erhält ZPL, PNG oder PDF zurück, auf Wunsch direkt gedruckt. Die Messwerte stammen aus unserem NativeAOT-Test; der Funktionsumfang ist geplant.

~4 msStart
~11 mserstes Etikett
~100 MBImage

gemessen im NativeAOT-Test auf linux/arm64

{ } :8080
Vorlage
  • Volume
  • Git
  • S3
  • Azure Blob
  • HTTP
Daten
  • JSON
  • Datenbank
  • CSV
  • REST
  • Queue
zplCore Serverfüllt · rendert · prüft · druckt
  • ZPL · PNG · PDFals Antwort, gestreamt
  • DruckerTCP 9100
  • AblageS3 · Azure Blob
  • Webhookbei Fertigstellung
Geplanter Ablauf: Vorlagen liegen beim Server, die Daten kommen mit dem Request oder aus Ihren Systemen.

Geplanter Funktionsumfang geplant

Vorlagen

einmal ablegen oder dynamisch per HTTP laden

  • JSON-Vorlagen aus Volume, Kubernetes-ConfigMap, Git, S3/MinIO, Azure Blob, Google Cloud Storage oder dynamisch per HTTP (URL oder direkt im Request)
  • Zwischengespeichert, Hot Reload bei Änderungen, versioniert
  • Aufruf über den Pfad, z. B. versand/dhl-100x150
  • Dieselben JSON-Vorlagen wie im SDK (Label.ToJson): einmal entwerfen, in App und Container nutzen
S3Azure BlobGCSHTTP

Daten

mitschicken oder abholen lassen

  • JSON direkt im Request
  • Benannte Datenbankquellen für SQL Server, PostgreSQL, MySQL/MariaDB, SQLite und Oracle: vordefinierte, parametrisierte Abfragen, nur lesend
  • Verbindungsdaten nur über Secrets: Docker- und Kubernetes-Secrets, Key Vault, Secrets Manager
  • Dateien (CSV, Excel, JSON), REST-APIs und Queues: Kafka, RabbitMQ, Azure Service Bus, AWS SQS

EF Core nutzen Sie direkt in Ihrer .NET-App mit dem SDK; im Container genügen benannte Abfragen, ganz ohne Code.

CSVExcelREST

Ausgaben

streamen, drucken, ablegen

  • ZPL als Stream, auch bei 100.000+ Etiketten pro Auftrag
  • PNG, SVG, PDF, ZIP oder JSON, gewählt über den Accept-Header
  • Direktdruck an benannte Drucker über TCP 9100, vorab geprüft mit dem Printer Twin
  • Ablage in S3, Azure Blob oder auf einem Volume; Webhook oder Queue-Nachricht bei Fertigstellung
ZPLPNGSVGPDFZIPJSON

Cluster

wächst mit der Last

  • Zustandslos und horizontal skalierbar: Kubernetes HPA oder KEDA nach CPU-Last oder Queue-Länge
  • NativeAOT: Start in Millisekunden
  • /health, /ready, /metrics (Prometheus) und OpenTelemetry
  • Eine Konfigurationsdatei zplcore.yaml oder Umgebungsvariablen, dazu ein Helm-Chart

So soll es aussehen geplant

# Vorlagen aus ./templates bereitstellen
docker run -p 8080:8080 \
  -v ./templates:/templates:ro \
  zplcore/server

# Daten rein, ZPL raus
curl -X POST \
  localhost:8080/v1/labels/versand/dhl-100x150 \
  -H 'Accept: application/vnd.zpl' \
  -H 'Content-Type: application/json' \
  -d '{"name":"Anna Huber","city":"Wien"}'

Außerdem geplant

  • REST-API mit OpenAPI und interaktiver API-Doku (Scalar) unter /docs
  • Ein Multi-Arch-Tag für linux/amd64 und linux/arm64
  • Distroless, ohne Root-Rechte, schreibgeschütztes Dateisystem; signierte Images mit SBOM
  • Lizenz offline, kein Phone-Home · Dev/Test kostenlos (mit Wasserzeichen)

Geplante Plattformen

  • linux/arm64 & armv7z. B. Raspberry Pi 4/5 (64-Bit) & Pi 2/3
  • linux/amd64 & NASx86-64-Server, VMs & Synology DS923+ (Container Manager)
  • Docker & Podmandocker run / podman run
  • Kubernetesmit Helm-Chart
  • CloudContainer-Dienste von Azure, AWS, Google Cloud
  • On-Prem & Air-Gapohne Internetverbindung
  • Windows & macOSüber Docker Desktop
Benachrichtigen lassen

Keine Preise, kein Kauf: Wir melden uns, sobald die erste Version bereitsteht.

Ein Paket statt vier

Ein NuGet-Paket für vier Aufgaben

Viele .NET-Teams kaufen für Etiketten gleich mehrere SDKs: einen ZPL-Emulator, einen EPL-Emulator, einen Label-Designer und eine Barcode-Bibliothek. zplCore.com übernimmt ZPL-Rendering, EPL-Rendering, Label-Design und Barcode-Erzeugung in einem SDK, in einer Assembly.

EinsatzfallÜblicherweisezplCore.com
ZPL → PNG/PDF-VorschauZPL-Emulator-SDKZplRenderer
EPL2 → Bild, EPL → ZPL-MigrationEPL-Emulator-SDKEplRenderer · ToZpl()
Etiketten im Code entwerfen, Daten binden, druckenLabel-Designer-SDKLabels.Label · PrintJobTemplate
Barcodes als Bild/Vektor, GS1-PrüfungBarcode-SDKBarcodes.Barcode · Gs1

Sie wechseln von einem anderen SDK? zplCore.com ist keine 1:1-Kopie fremder APIs und hat nicht jede Funktion. Schicken Sie uns Ihre ZPL-Dateien und Anforderungen, dann prüfen wir die Abdeckung vor dem Kauf (siehe auch bekannte Grenzen).

Weltschriften

Arabisch, Chinesisch, Hindi, Koreanisch, Japanisch, Russisch: korrekt geformt

TrueType-Schrift in den Druckerspeicher laden oder als Grafik drucken. Diese Ausgaben stammen direkt aus der Engine.

Arabisches Etikett, gerendert mit ZplCore
Arabisch (TTF)
Chinesisches Etikett – gerendert mit zplCore.com
Chinesisch (TTF)
Hindi-Etikett – gerendert mit zplCore.com
Hindi (TTF)
Koreanisches Etikett – gerendert mit zplCore.com
Koreanisch (TTF)
Japanisches Etikett – gerendert mit zplCore.com
Japanisch (TTF)
Russisches Etikett (Kyrillisch)
Russisch (TTF)
Versandetikett, gerendert aus ZPL
Versandetikett aus ZPL
EPL2-Etikett – gerendert mit zplCore.com
EPL2-Rendering
MaxiCode – gerendert mit zplCore.com
MaxiCode
Data Matrix – gerendert mit zplCore.com
Data Matrix

Code

Drei Zeilen C# bis zur Vorschau

var renderer = new ZplRenderer(new ZplRenderSettings { Dpi = 203 }.WithLabelSizeMm(100, 150));
List<byte[]> pngs = renderer.ProcessCommands(
    "^XA^FO50,50^A0N,40,40^FDHallo Welt^FS^BY2^FO50,120^BCN,80^FD12345^FS^XZ");
renderer.Settings.OutputFormat = ZplOutputFormat.Pdf;
File.WriteAllBytes("preview.pdf", renderer.ProcessFile("labels.zpl")[0]);

Beispiel: Logistik-Druckauftrag

Ein Druckauftrag aus der Datenbank: Start, Sendungen, Ende

Zwölf Sendungen einer Zustelltour liegen in einer SQLite-Datenbank. Eine EF-Core-Abfrage liefert sie, PrintJobTemplate erzeugt daraus einen Auftrag in einer ZPL-Datei: Start-Label, zwölf Versandlabels im Format 100 × 150 mm (Absender, Empfänger, Service-Feld, Routing-Code, SSCC als echter GS1-128 mit FNC1, Tracking-QR und Code 128, Zähler 1/12) und End-Label mit Summen und Schnitt. Vorlagen sind die JSON-Dateien aus samples/templates, das Programm liegt unter samples/LogisticsShowcase.

  1. Start-Label des Druckauftrags Tour 17 mit Datum, 12 Sendungen, Gesamtgewicht und erster/letzter SSCC
    Start-Label: Tour, Datum, Anzahl, erste/letzte SSCC
  2. Versandlabel 1 mit Empfänger, Routing-Code, Tracking-QR und GS1-128-SSCC
    Versandlabel aus der Datenbank (1/12)
  3. Versandlabel 2 mit Empfänger, Routing-Code, Tracking-QR und GS1-128-SSCC
    Versandlabel aus der Datenbank (2/12)
  4. Versandlabel 3 mit Empfänger, Routing-Code, Tracking-QR und GS1-128-SSCC
    Versandlabel aus der Datenbank (3/12)
  5. End-Label mit 12 gedruckten Labels, Gesamtgewicht, erster und letzter SSCC und Schnittmarke
    End-Label: Summen, erste/letzte SSCC, Schnitt
14Labels in einer Datei1 + 12 + 1, CutAfterLastLabel
18,1 KBZPL für den ganzen Auftrag18.541 Bytes
2,5 msErzeugung (Abfrage + ZPL)gemessen, Release, Apple M3 Max
1,5 MBVektor-PDF des AuftragsPdfVector, 100 × 150 mm
var job = PrintJobTemplate.FromFiles("leading.json", "shipping.json", "trailing.json");
job.JobName = "Tour 17 · Wien Süd";
job.KeyField = "TrackingNo";          // erste/letzte SSCC auf dem End-Label
job.CutAfterLastLabel = true;         // Schnitt nach dem End-Label

var shipments = db.Shipments.AsNoTracking()          // EF Core, von SQLite ausgeführt
    .Where(s => s.Tour == 17 && !s.Printed)
    .OrderBy(s => s.RoutingCode).ThenBy(s => s.TrackingNo)
    .ToList();
job.Leading.Expressions                                // Kopf-Daten für das Start-Label
    .SetCustomVariable("FIRST_SSCC", shipments[0].TrackingNo)
    .SetCustomVariable("LAST_SSCC", shipments[^1].TrackingNo)
    .SetCustomVariable("TOTAL_WEIGHT", $"{shipments.Sum(s => s.WeightKg):0.0} kg");

string zpl = job.For<Shipment>()
    .Map("Total", s => $"{s.WeightKg:0.0} kg")
    .ToZpl(shipments);                // Start-Label + 12 Versandlabels + End-Label
File.WriteAllText("tour17.zpl", zpl);

Preise

Perpetual-Lizenz, ohne Laufzeitgebühren

Developer

990 €

pro Entwickler, einmalig

  • interne Nutzung
  • unbegrenzte eigene Server & Container
  • 12 Monate Updates
  • E-Mail-Support (2 Werktage)
Testversion anfragen
Empfohlen

Team

2.900 €

bis 5 Entwickler, einmalig

  • alles aus Developer
  • Support innerhalb 1 Werktag
  • 12 Monate Updates
Testversion anfragen

OEM / SaaS

5.900 €

bis 5 Entwickler, einmalig

  • lizenzgebührenfreie Weitergabe in Ihren Produkten
  • Betrieb als SaaS-/Serverdienst
  • 12 Monate Updates + Support
Angebot anfragen

Enterprise

ab 12.000 €

auf Anfrage

  • unbegrenzte Entwickler
  • OEM inklusive
  • individuelle EULA, Priority Support
Kontakt aufnehmen

Alle Angebote richten sich ausschließlich an gewerbliche Kunden (B2B). Preise netto zzgl. gesetzlicher USt. Verlängerung von Updates & Support: 40 % des Listenpreises pro Jahr. Ohne Verlängerung dürfen Sie die zuletzt erhaltene Version unbegrenzt weiter nutzen. Auf Wunsch ist ein Jahresabo möglich.

FAQ

Häufige Fragen

Wie wird lizenziert?

Pro Entwickler, der mit zplCore.com programmiert. Produktions-, Test- und Build-Server zählen nicht als Entwickler. Die Lizenz ist dauerhaft (perpetual) und enthält 12 Monate Updates. Lizenzen werden ausschließlich an gewerbliche Kunden (B2B) vergeben.

Kann ich zplCore.com lizenzgebührenfrei weitergeben?

Ja, ab der OEM-/SaaS-Lizenz in Ihren eigenen Anwendungen und Diensten. Ausgenommen ist ein Weiterverkauf als eigenständiges Entwickler-SDK.

Wie sieht der Support aus?

E-Mail-Support durch das Entwicklerteam. Die Reaktionszeit hängt von der Lizenzstufe ab. Bugfixes kommen mit den regulären Updates.

Enthält zplCore.com fremden Code anderer Hersteller?

zplCore.com ist eine unabhängige Implementierung auf Basis der öffentlichen ZPL-II-Spezifikation und der Symbologie-Standards. Sie enthält keinen Code anderer kommerzieller Anbieter. Verwendete Open-Source-Komponenten (z. B. aus BWIPP/bwip-js und zint, MIT- bzw. BSD-Lizenz) sind in THIRD-PARTY-NOTICES.md dokumentiert.

Was kann zplCore.com (noch) nicht?

Nicht umgesetzt sind Pharmacode 2D, Response Plus PostMatrix und HIBC nach ISO/IEC 15434, für die es keine öffentliche Spezifikation gibt. Deutsche Post BZL und JABCode sind experimentell. Zebras residente Schriften sind proprietär und werden durch Roboto Condensed bzw. DejaVu ersetzt, kalibriert auf Zebra-Metriken. Wer identische Glyphen braucht, registriert die Original-TTF. Die Drucker-Transporte seriell, USB, Windows-Spooler und CUPS sind nicht auf Hardware getestet. Compliance-Pre-Check, Scan-Proof und Printer Twin prüfen das gerenderte Etikett: Sie ersetzen weder die Freigabe durch Carrier oder Behörden noch ein Barcode-Prüfgerät am gedruckten Etikett. Die Schwärzung ist regelbasiert und ohne Vollständigkeitsgarantie, Text in Bildern wird nicht gelesen. Vector-Lift setzt Text in Font 0 statt der Originalschrift, und Text, der im PDF nur als Umriss vorliegt, bleibt Grafik (keine OCR). Label-Vorlagen gibt es nur als JSON.

Kann ich vor dem Kauf testen?

Ja. Schreiben Sie uns, dann senden wir Ihnen eine Testversion. Gern prüfen wir auch Ihre eigenen ZPL-/EPL-Dateien.

Testversion

Lassen Sie uns über Ihre Etiketten sprechen

Testversion, Angebot oder Migrationscheck: Schicken Sie uns eine kurze Nachricht.

  • Antwort direkt vom Entwicklerteam
  • Gern prüfen wir Ihre eigenen ZPL-/EPL-Dateien
  • Für gewerbliche Kunden (B2B)

Lieber per E-Mail?

support@zplcore.com

Testversion anfragen

Sie sind

* Pflichtfeld. Ihre Angaben gehen direkt an unser Support-Postfach und werden nur für Ihre Anfrage verwendet.