zplCore.com · High Performance .NET Labelprint Engine

.NET 10 · ZPL II · EPL2 · Barcodes

Etiketten rendern, erzeugen und drucken. Mit einer einzigen Bibliothek.

zplCore.com ist ein virtueller Etikettendrucker für .NET: ZPL II und EPL2 werden zu PNG oder PDF, Etiketten aus C#-Objekten werden zu ZPL, und 144 Barcode-Symbologien sind eingebaut. Läuft unter Windows, Linux und macOS, ohne Druckertreiber.

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
199.000Labels/s ZPL-Erzeugung
144Barcode-Symbologien
1.656automatisierte Tests

gerendert mit zplCore.com · PNG

Auf einen Blick

ZPL II & EPL2rendern und konvertieren
144 Symbologieninklusive GS1-Validierung
PNG · PDF · TIFF · PCLESC/POS · GIF · HTML · EPS
Windows · Linux · macOSohne Druckertreiber
.NET 10 · NuGet · CLIDockerfile + Helm-Chart
1.656 Testsautomatisiert
samples/zpl/hero-label.zplAuszug · 203 dpi · 4×6″
^XA ^CI28 ^PW812 ^LL1218
^FX Kopf: gefüllter Block + ^FR invertiert
^FO0,0^GB812,150,150^FS
^FO32,26^A0N,62,62^FR^FDFLINKFRACHT^FS
^FO640,166^GC130,8,B^FS        24h-Stempel
^FO32,356^A0N,170,140^FD80-B7^FS  Routing, Font 0
^FO32,540^GB748,236,4,B,2^FS   abgerundet
^FO56,598^A0N,44,44^FDJürgen Größmann^FS
^BY3,3,110^FO60,826^BCN,110,Y,N,N^FDZE4711802026DE^FS
^FO40,1000^BXN,7,200^FDZE4711802026DE|80331|B7^FS
^FO220,996^B7N,5,2,4^FDFLINKFRACHT|…^FS
^FO280,1100^BCN,60,Y,N,N^FD>;>800340123450000000018^FS
^XZ
// C#: new ZplRenderer(settings).ProcessCommands(zpl) → PNG

Funktionen

Alles, was zwischen Daten und Etikett passiert

Rendern

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.

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.

Geprüfte Genauigkeit

Automatisierter Pixelvergleich gegen druckergenaue Referenzrenderings, im Mittel 0,974 über 122 Testfälle. Barcode-Encoder sind bit-genau gegen bwip-js geprüft.

Erzeugen & Binden

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.

Drucken & Betrieb

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 und rendert eingehende Druckjobs. Testen ohne Hardware.

Kommandozeile

Das zpl-dotnet-Tool rendert, konvertiert EPL nach ZPL, druckt, erzeugt Barcodes und validiert.

TrueType-Fonts

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

Weltschriften

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

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

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

Release-Build, .NET 10, Apple M3 Max mit 10 Performance- und 4 Effizienzkernen. 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

Plattform & Cloud

Läuft dort, wo Ihr Backend läuft

Geprüft

Windows · Linux · macOS

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

Cloud

Container

Getestet in den .NET-Images für Debian und Azure Linux 3.0, auch im minimalen Distroless-Image. Keine zusätzlichen Systempakete nötig, die nativen Bibliotheken bringt das NuGet-Paket mit.

Beispiel

Minimal-API-Beispiel

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

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

Docker & Kubernetes

Dockerfile und Helm-Chart im Lieferumfang

  • Alle Tests laufen grün in den offiziellen .NET-10-Container-Images für Debian und Azure Linux 3.0.
  • Dockerfile.server im Lieferumfang: Distroless-Image, läuft ohne Root-Rechte, mit /health-Endpunkt.
  • 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.
  • Zustandslos pro Renderer: Ein Webdienst skaliert horizontal.
  • 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"]

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 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]);

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

Preise netto zzgl. 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 gibt es ein Jahresabo.

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.

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. Die proprietären residenten Zebra-Fonts werden durch DejaVu ersetzt. Wer identische Metriken braucht, registriert die Original-TTF. Bei der QR-Maskenwahl weicht die Ausgabe von Zebra ab, die Codes bleiben lesbar. 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.

Lassen Sie uns über Ihre Etiketten sprechen

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

support@zplcore.com