ZplCore 1.0.0
dotnet add package ZplCore --version 1.0.0
NuGet\Install-Package ZplCore -Version 1.0.0
<PackageReference Include="ZplCore" Version="1.0.0" />
<PackageVersion Include="ZplCore" Version="1.0.0" />
<PackageReference Include="ZplCore" />
paket add ZplCore --version 1.0.0
#r "nuget: ZplCore, 1.0.0"
#:package ZplCore@1.0.0
#addin nuget:?package=ZplCore&version=1.0.0
#tool nuget:?package=ZplCore&version=1.0.0
zplCore.com
High Performance .NET Labelprint Engine
.NET 10 library (ZplCore.dll) built on SkiaSharp + HarfBuzz. One assembly contains:
- ZPL renderer (
ZplRenderer): a virtual Zebra printer, ZPL II → PNG / JPEG / WebP / BMP / PDF / GRF / TIFF / GIF / SVG / HTML / EPS / PCX / PCL / EPL / Fingerprint / ESC/POS. Structured diagnostics with source positions. - Label model (
Labels.Label): items in mm/inch → ZPL, preview, JSON, expressions, mass data binding (LINQ / EF Core / LiteDB). - Printing (
Printing): TCP 9100, serial, USB, parallel, Windows spooler, CUPS; job settings (^MM ^MN ^MT …),~HS/~HQESstatus, USB discovery, dry run, and a virtual TCP 9100 printer (ZplVirtualPrinter). - Export (
Export.RasterExport,Export.LabelLanguageWriter): PCX, TIFF, EPL, Fingerprint, ESC/POS, PCL. - EPL2 renderer (
EplRenderer): renders EPL2 through the same engine.ToZpl()is an EPL→ZPL converter. - Barcode generator (
Barcodes.Barcode): 144 symbologies, with output to PNG/JPEG/WebP, vector SVG/PDF/EPS, ZPL^GFA, or anySKCanvas. - GS1 (
Barcodes.Gs1): Application Identifier parser and validator (534 AIs), GS1-128, SSCC-18, ITF-14 and composite codes (CC-A/B/C).
This is an independent implementation based on the public ZPL II specification and the symbology standards.
Documentation: zplcore.com/docs. Full API reference: zplcore.com/api-reference.
Performance: 200,000+ shipping labels per second (real 100 × 150 mm / 4 × 6 in label with 33 elements, QR + Code 128
- GS1-128; dictionary or JSON records → ZPL file, JIT and NativeAOT), 100,000 shipping labels in under half a second, over 1,000 PNG previews per second (all cores) and over 100,000 labels per second straight from C# objects (POCO, JIT). Measured on an Apple M3 Max (14 cores), macOS, .NET 10, median of 5 runs, byte-identical output checked. Details and Docker/NativeAOT results: zplcore.com/performance. Measurements, not a guarantee.
Licence key
zplCore is commercial software (EULA). The licence key is checked offline against its signature: no phone-home, no telemetry, works air-gapped. Without a key everything works in evaluation mode, and previews, images, PDF/SVG and generated ZPL carry a visible "zplCore.com TRIAL" watermark. Register the key once at start-up:
ZplCore.Licensing.ZplCoreLicense.Register(builder.Configuration["ZplCore:License"]!);
Alternatively, set the environment variable ZPLCORE_LICENSE (the key), ZPLCORE_LICENSE_FILE (path of a file), or
put a file zplcore.license next to the application. ZplCoreLicense.Status tells you what was found. Keep the key
secret and never commit it. Pricing and licensing: zplcore.com/pricing.
Quickstart
using ZplCore;
var renderer = new ZplRenderer(new ZplRenderSettings { Dpi = 203 }.WithLabelSizeMm(100, 150));
List<byte[]> pngs = renderer.ProcessFile("labels.zpl"); // one PNG per label
renderer.Settings.OutputFormat = ZplOutputFormat.Pdf; // one PDF, one page per label
File.WriteAllBytes("preview.pdf", renderer.ProcessFile("labels.zpl")[0]);
using ZplCore.Labels;
var label = new Label(LabelUnit.Mm, 100, 60)
.AddFontFile("fonts/Arial.ttf", "ARIAL.TTF") // sent to the printer via ~DY
.Add(new TextItem { X = 5, Y = 5, DataField = "Customer.Name", Font = "E:ARIAL.TTF", FontSize = 14 })
.Add(new BarcodeItem { X = 5, Y = 20, DataField = "TrackingNo" })
.Add(new TextItem { X = 5, Y = 50, Expression = "\"Paket \" + LABEL_NUMBER" });
// EF Core: streaming, ^DF template once, then only field values
await label.For<Shipment>()
.Copies(s => s.Parcels)
.UseStoredFormat()
.PrintAsync(new ZplCore.Printing.ZplPrinterClient("192.168.1.50"),
db.Shipments.Include(s => s.Customer).Where(s => !s.Printed).AsAsyncEnumerable());
// EPL2
var epl = new EplRenderer(new ZplRenderSettings { Dpi = 203 });
List<byte[]> labels = epl.ProcessFile("label.epl");
string zpl = epl.ToZpl(File.ReadAllText("label.epl")); // migrate EPL forms to ZPL
// Stand-alone barcodes
var bc = new ZplCore.Barcodes.Barcode
{
Symbology = ZplCore.Barcodes.Symbology.Gs1_128,
Code = "(01)09521234543213(10)LOT42",
Unit = ZplCore.Barcodes.BarcodeUnit.Millimeter, BarWidth = 0.33, BarHeight = 20,
};
File.WriteAllText("gs1.svg", bc.ToSvg());
File.WriteAllBytes("gs1.pdf", bc.ToPdf());
// GS1 validation
var r = ZplCore.Barcodes.Gs1.Parse("(01)09521234543213(17)251301"); // r.Errors → invalid date
// ^FN fields: test data for templates (plain labels and ^DF/^XF formats, all labels and ^PQ copies)
var filler = new ZplRenderer(new ZplRenderSettings { FieldValues = new Dictionary<int, string> { [1] = "ACME", [2] = "Vienna" } });
List<byte[]> filled = filler.ProcessFile("template.zpl"); // unknown keys → diagnostic ZPL1301 (INVALID_FIELD_VALUE_KEY)
foreach (var f in ZplCore.Parsing.ZplFields.Find(zpl)) // number, ^FN1"Prompt", default value, ^DF format
Console.WriteLine($"{f.Number}: {f.Prompt} = {f.Value}");
string merged = ZplCore.Parsing.ZplFields.Fill(zpl, filler.Settings.FieldValues!); // ^FN → ^FD, ^XF expanded
Print jobs from JSON templates (one job: leading label + records + trailing label + cut)
using ZplCore.Labels;
var job = PrintJobTemplate.FromFiles("templates/leading.json", "templates/shipping.json", "templates/trailing.json");
job.JobName = "Tour 7";
job.KeyField = "TrackingNo"; // first/last key on the trailing label
job.CutAfterLastLabel = true; // ^MMT for all labels, ^MMC only for the last one
job.StoredFormatName = "R:SHIP.ZPL"; // optional: template once, then only field values
string zpl = job.For<Shipment>().ToZpl(db.Shipments.Where(s => !s.Printed).Take(50).ToList());
File.WriteAllText("job.zpl", zpl); // 52 labels in ONE file
Leading and trailing labels bind to PrintJobInfo: JobName, Created, RecordCount, LabelCount, FirstKey and LastKey.
Features
| Area | Contents |
|---|---|
| Format and setup | ^XA ^XZ ^PW ^LL ^LH ^LS ^LT ^LR ^PO ^PM ^MU ^PQ ^CI ^CC ^CT ^CD ^FX ^JM ^MC |
| Fields | ^FO ^FT ^FS ^FD ^FV ^FH ^FR ^FB ^TB ^FP ^FW ^FN ^SN ^SF ^FC ^SO ^ST ^RF |
| Fonts | ^A (0, A–H), ^A@, ^CF ^CW ^FL ^PA, ~DY ~DU ~DB; embedded DejaVu fonts; any TTF via RegisterFont/RegisterFolder; HarfBuzz shaping for Arabic, Hebrew, Thai and Indic scripts; bidi; system font fallback (CJK) |
| Graphics | ^GB ^GC ^GE ^GD ^GF (hex with compression, Z64, B64, binary), ~DG ^XG ^IM ~DY ^ID ~EG ^GS ^IS ^IL ^TO |
| ZPL barcodes | ^BC ^B3 ^BA ^BE ^B8 ^BU ^B9 ^B2 ^BK ^BM ^BP ^B1 ^BI ^BJ ^BL ^BS ^BZ (incl. Intelligent Mail) ^B5 ^BQ ^BX ^B7 ^BF ^BB ^B4 ^B0/^BO ^BD ^BR ^BT, ^FM |
| Barcode generator | Code 128, GS1-128, Code 39/93 (incl. extended), Code 11, Codabar, MSI, Plessey, Telepen, Pharmacode (one- and two-track), Channel Code, EAN/UPC/JAN/ISBN/ISSN/ISMN with add-ons, 2 of 5 family, ITF-14, SSCC-18, EAN-14, VIN, HIBC, LOGMARS, PZN, Code 32, Leitcode/Identcode, GS1 DataBar (all 7), postal codes (POSTNET, PLANET, IMb, Royal Mail, KIX, Australia Post, Japan Post, DAFT, FIM), PDF417 (compact/macro), MicroPDF417, Codablock F, Code 16K, Code 49, QR, Micro QR, rMQR, GS1 QR, Swiss QR, EPC QR, Data Matrix (square/rectangular/DMRE/GS1), Aztec (runes, GS1), MaxiCode, Han Xin, DotCode, Ultracode, GS1 Composite CC-A/B/C, TLC39, Deutsche Post BZL (experimental, ZPLBZL001), JAB Code (experimental) |
| EPL2 | N q Q R A B b X LO LE LW LS GW GM GG GK FS FE FK FR V C ? P TS TT TD ZT ZB; fonts 1–5 at 203/300 dpi; forms with variables and counters |
| Stored formats | ^DF ^XF ^FN, ZplRenderSettings.FieldValues (fill ^FN per render), ZplFields.Find/Fill |
| Printer | ~JR, ~WC config label, ~HS answered through the PrinterControl event; all other control commands are reported through PrinterControl |
| Renderer settings | DPI, size, colors, background and watermark image, rotation, invert, thumbnails, RenderOutputIndexes, PDF metadata, PDF/A and tagged PDF, PDF sheet layout, ToJson/FromJson |
| Label model | Text, Barcode, Rectangle, Line, Ellipse, Circle, Image, Table, Repeater, RFID and raw ZPL items. Text supports AutoFit, MaxLength, HideIfEmpty, Validation and InputMask. Also: PrintAsGraphic, embedded TTF, expressions, Validate, ToHtml, JSON |
| Print jobs | LabelBinding.Job/WithLeadingLabel/WithTrailingLabel/CutAfterLastLabel, PrintJobTemplate (built from one JSON or from three JSON templates) |
| Label extras | Mask counters (Mask/MaskIncrement), LabelSheet (sheets of labels), multi-page and duplex labels (Label.Pages), EPL/Fingerprint output with data binding, expression type references |
| ZPL object model | ZplDocument.Parse with typed commands (98 classes) and lossless round-trip; fluent ZplBuilder |
| Printing | IPrinterConnection: TCP 9100, serial, raw device or file (USB/LPT), Windows spooler (RAW), CUPS, stream; PrinterConnectionFactory |
| Renderer outputs | PNG, JPEG, WebP, BMP, PDF (incl. sheets; vector with searchable text by default, optional PDF/A-2 b/u/a and tagged PDF), SVG (vector, see below), GRF, TIFF (multi-page), PCX, PCL, EPL, Fingerprint, ESC/POS, GIF, HTML, EPS |
| Barcode extras | QR module and finder shapes, logo, light margin indicators, text format patterns, Base64/Hex input, tilde/ECI, QR version and mask, structured append (QR, Data Matrix, Aztec, MaxiCode, PDF417), TIFF/PCX/PCL/EPS (CMYK) and HTML output |
| Compliance pre-check | ZplCompliance.Check(zpl, CompliancePacks.Gs1LogisticLabel \| …): 84 rules in 8 packs (GS1 logistic label, Sunrise 2027 / GS1 Digital Link, Amazon FBA, UPS MaxiCode, UDI, FedEx and DHL Paket basics, RFID / EPC) on the rendered geometry (X-dimension in mm, bar height, quiet zones, HRI size); custom rules; JSON and SARIF 2.1.0; CLI zplcore comply — a pre-check, not a certification |
| Scan-proof (barcode assurance) | ZplScanProof.Verify(zpl): every barcode decoded back from the rendered bitmap by two independent decoders (zxing-cpp, ZXing.Net) and compared with the field data; X-dimension, quiet zones, clipping, overlaps, HRI; digital grade A–F modelled on ISO/IEC 15416/15415 (a pre-check, not an ISO verification); JSON/SARIF; CLI zplcore verify |
| Vector-Lift (PDF/SVG → native ZPL) | Package ZplCore.VectorLift: VectorLift.Convert(pdf or svg, options) turns carrier/ERP label PDFs and SVGs into native ZPL – text as ^A0 fields (or ^A@ with a downloaded font you own), barcodes decoded and regenerated as ^BC ^BE ^B8 ^BU ^B9 ^B3 ^BA ^B2 ^BK ^BQ ^BX ^B7 ^BO ^BD (also from raster images) and verified by decoding, lines/boxes/circles as ^GB ^GD ^GC ^GE, ^GF only for the rest; measured fidelity against the original (PDFium/Skia), per-element report, size vs. a full ^GF; CLI zplcore lift |
| GS1 Digital Link / 2D migration | Gs1DigitalLink.Build/Parse (URI Syntax 1.7.0, element string ⇄ URI, legacy decompression) and ZplGs1Migration.Migrate: adds a QR Code with GS1 Digital Link URI or a GS1 DataMatrix next to the EAN/UPC, GS1-128, ITF-14 or DataBar of existing ZPL, in free space with quiet zones, and runs the sunrise pre-check; CLI zplcore gs1 migrate|link|parse — a migration assistant, not a certification |
| RFID Studio | ZplRfid.EncodeEpc/DecodeEpc: EPC after the GS1 EPC Tag Data Standard 2.3 (SGTIN-96/198, SSCC-96, SGLN-96/195, GRAI-96/170, GIAI-96/202 and the TDS 2.0 schemes SGTIN+, DSGTIN+, SSCC+, SGLN+, GRAI+, GIAI+; Pure Identity / Tag URI, Digital Link, PC word), ZplRfid.BuildCommands (^RS ^RR ^RW ^RB ^RF ^HV ^RLM), consistency check EPC ↔ printed barcode (ZplRfid.Check, codes ZPL3901–ZPL3912), Gen2 tag simulation (ZplRfidSimulator, ZplVirtualPrinter.RfidSimulator); CLI zplcore rfid encode\|decode\|check\|simulate |
| Testing+ (label tests and PR checks) | NuGet ZplCore.Testing: ZplAssert.Label(zpl).Barcode("SSCC").Decodes("(00)…").HasGrade(atLeast: 'B').And.NoOverlaps().Complies(…).MatchesSnapshot("name") for xUnit/NUnit/MSTest with element positions, ZPL lines and annotated images in failure messages; pixel + semantic snapshots with approval workflow; CLI zplcore check (JUnit XML, SARIF, Markdown, exit codes) and the GitHub Action zplcore/label-check (Marketplace publication planned) with PR comment and before/after/diff images |
| Label understanding & redaction | ZplExtract.Run(zpl): texts with roles, barcode data (GS1 AIs with titles and validity, Digital Link, MaxiCode / PDF417 carrier messages) and entities with confidence, source boxes and evidence — address blocks in 8 languages, tracking numbers (UPS, FedEx, DHL, USPS, UPU S10 …) with check digits, SSCC/GTIN/batch/expiry, dates, weights, references. ZplRedact.Run(zpl): same-layout redaction of personal data incl. ^FX, ^DF/^XF, ^FN, ^SN, ^RF and carrier messages, valid dummy barcodes, verification. Assistive and rule-based, no guarantee of completeness; CLI zplcore extract / redact |
| Data binding | label.For<T>(): Map, Copies, UseStoredFormat, Across (multi-across), Generate, WriteZplAsync, Batches, PrintAsync, Render, RenderPdf. Nested paths, DataRow, dictionaries and LiteDB BsonDocument are supported, with compiled accessors. [ZplRecord] on a class, record or struct: the package's source generator writes its field readers at compile time – no reflection, the same output, NativeAOT without TrimmerRootAssembly, and data-only types are generated on all cores |
RFID watermark in previews
Labels with an RFID tag operation (^RF, ^WT, ^WF, ^RQ; ^RS/^RB setup alone does not count) show a grey RFID tag
pictogram in previews, like common ZPL viewers: centred, about 0.86" wide (independent of the label size), behind all
label content (ink pixels stay unchanged) and turned with ^PO I. SVG and vector PDF get it as a vector path
(<g class="rfid-indicator">).
var s = new ZplRenderSettings
{
RfidIndicator = ZplRfidIndicator.Watermark, // default; None switches it off
RfidIndicatorColor = new SKColor(0xC0, 0xC0, 0xC0),
RfidIndicatorOpacity = 1f,
};
Only PNG, JPEG, WebP, BMP, GIF, PDF, SVG, HTML and EPS show it. Printer languages (GRF, EPL, PCL, Fingerprint, ESC/POS) and the 1-bit TIFF/PCX files never contain it.
Vector output (SVG/PDF)
ZplOutputFormat.Svg produces true vector graphics: frames, lines, circles, ellipses and diagonals (^GB ^GC ^GE ^GD,
also rounded and white) as paths (arcs as A segments), barcodes as module rectangles and text as glyph outlines from the
same layout as the raster image (HarfBuzz shaping, fonts 0 and A–H, ^FB/^TB, rotations). The SVG therefore looks identical
even without the fonts installed and stays sharp at any zoom. Each field is a <g> with data-cmd, data-offset and
data-length (the ^FO…^FS source span in the ZPL), so a web UI can map clicks back to ZPL positions.
var renderer = new ZplRenderer(new ZplRenderSettings { Dpi = 203 }.WithLabelSizeMm(100, 150));
List<string> svgs = renderer.RenderSvg(zpl); // one SVG document per label, independent of OutputFormat
// or via OutputFormat, with options
var settings = new ZplRenderSettings
{
OutputFormat = ZplOutputFormat.Svg,
SvgSelectableText = true, // additional invisible <text> over single-line text fields (selectable/searchable)
SvgElementAttributes = true, // data-cmd/data-offset/data-length (default)
};
byte[] svg = new ZplRenderer(settings).ProcessCommands(zpl)[0];
// Vector PDF is the default; PdfVector = false embeds one lossless image per label at label dpi
byte[] pdf = new ZplRenderer(new ZplRenderSettings { OutputFormat = ZplOutputFormat.Pdf }).ProcessCommands(zpl)[0];
SvgMode = ZplSvgMode.TracedRastergives the earlier SVG (raster image split into rectangles),ZplSvgMode.EmbeddedRasterembeds the PNG.^GF,~DG/^XG,^IMand^ILare embedded as a 1-bit PNG (<image>) at their position; bitmap fonts loaded via~DBare split into rectangles pixel-exactly.^FR/^LR(XOR): where the field ink sits over pure black or pure white, the field stays vector (paper or ink colour, e.g. white text on a black bar). Over a mixed background only that field area is embedded as an image from the raster.^PO I,^PM,^LH,^LS, label size, colours, background and watermark image,OutputRotation,FlipandPaperOrientationapply like for the raster image; vector PDF also supports sheet layout.- Text is never written as font text, always as a path. This avoids Skia's non-thread-safe SVG/PDF text path (DirectWrite on Windows); parallel rendering is safe.
PdfVectoris on by default (sharp at any zoom);PdfVector = falsegives the raster PDF. All images in PDFs are embedded losslessly (never JPEG).
Accuracy against a real printer
A ZPL corpus is rendered and compared pixel by pixel, with 2-dot tolerance, against printer-accurate reference renders
(Labelary). Mean score 0.974 over 122 cases (79 cases ≥ 0.99). Identical or ≥ 0.99: font 0 in all sizes and rotations,
^FB, ^TB, ^FT, ^FR/^LR, shapes, ^GF, all 1D barcodes, EAN/UPC layout, Code 128 modes, POSTNET, MaxiCode, Aztec.
Zebra behaviour this reproduces: font 0 advance widths per character; QR position offset by the ^BY height, and QR error
correction boosting; Code 128 mode N stays in subset B; barcode text overflows outside the field; wide element width is
floor(ratio × module); ^TB line pitch is 1.26 × h; font B is uppercase only, font H has no lowercase; ^FN together
with ^FD in a stored format is a fixed field.
Limits
- Remaining visual differences to Zebra (all symbols still decode correctly): the DataMatrix encodation when ASCII and Text are the same length; the glyph shapes of the bitmap fonts A–H. Macro PDF417 (
^B7with^FM) and the MicroPDF417 part of^BTare not verified against Labelary. - QR (
^BQ, model 2) is module-identical with Labelary: mode segmentation, version, error correction boost and mask (ISO/IEC 18004 penalty on the complete symbol), verified on more than 3,600 symbols (versions 1–33, all levels and masks, manual input modes, GS1,^CI28). Model 1 (^BQ…,1) is printed as model 2. - Zebra's resident fonts are proprietary, so DejaVu replaces them. Register the original TTF if you need identical metrics.
- Not implemented (no public specification): Response Plus PostMatrix, Pharmacode 2D, HIBC ISO/IEC 15434 envelope. ISBT 128 helpers cover DS001–DS011 only.
- Experimental: Deutsche Post BZL (
[Experimental("ZPLBZL001")]) and JAB Code; the JAB Code encoder is slow (about 0.5 s for 120 random Unicode characters). - On Linux the glyph rasterisation differs slightly (FreeType vs CoreText).
- All encoders ported from BWIPP are bit-exact against bwip-js; ZXing decode tests are added where ZXing supports the symbology.
- Fingerprint output has not been tested on hardware.
Platforms, scripts and databases
- Verified on macOS, Windows 11, Debian and Azure Linux 3.0 (SDK, runtime and distroless runtime); no native packages required.
- NativeAOT-compatible: ZplCore, ZplCore.VectorLift, ZplCore.Testing, the CLI and the MCP server are
IsAotCompatiblewith 0 trim/AOT warnings; AOT output is byte- and pixel-identical to JIT. POCO binding of nested types needs<TrimmerRootAssembly>(otherwise aMissingMemberException, never empty fields) – or[ZplRecord]on the types (source generator, no reflection). - World scripts (Arabic, Chinese, Hindi, Korean, Japanese, Russian) render with downloaded Noto TTFs, both via
~DU+^A@and as graphics. - Data binding works with SQLite (EF Core), LiteDB, SQL Server 2022, PostgreSQL and MongoDB.
Command line tool
The CLI ships as the separate .NET tool package ZplCore.Cli (command zplcore): render, convert EPL→ZPL, print to
network printers, generate barcodes, validate, format, diff, import, compliance pre-check, scan-proof, Vector-Lift, GS1
2D migration, extract and redact. An MCP server for coding agents ships as ZplCore.Mcp (command zplcore-mcp). See
zplcore.com/docs.
Server image, Designer and Capture
- Server image and Helm chart: a container image renders over HTTP (
/api/jobs/preview), deployable with the Helm chart. See zplcore.com/server. - zplCore Designer: embeddable WYSIWYG label editor (NuGet
ZplCore.Designer, Docker image, JavaScript SDK@zplcore/designer, Web Component and Blazor). Licensed separately (requires a zplCore SDK licence of the same or a higher tier). See zplcore.com/docs/designer, try it: zplcore.com/editor. - Artistic codes: logo QR, module and finder shapes, gradient fills and barcode motifs; every designed symbol is read back after rendering and weakened or reported when it does not scan. See zplcore.com/artistic.
- zplCore Capture: Windows app that turns labels from existing label software into zplCore JSON templates by reading only the print job. Provided on request. See zplcore.com/migration.
Trademarks
Zebra, ZPL, ZPL II, EPL and Link-OS are trademarks or registered trademarks of Zebra Technologies Corp. QR Code is a registered trademark of DENSO WAVE INCORPORATED. GS1, GS1 DataBar, GS1 Digital Link, EPC and EPCglobal are trademarks of GS1 AISBL. ESC/POS is a registered trademark of Seiko Epson Corporation, Intelligent Mail a registered trademark of the United States Postal Service and Mailmark a registered trademark of Royal Mail Group Ltd. Other product and company names and logos mentioned are trademarks or registered trademarks of their respective owners. We use these names only to describe compatibility with file formats, printer languages and standards. zplCore.com is an independent product and is not endorsed, sponsored or certified by these companies; compliance packs are pre-checks, not certifications.
Contact: support@zplcore.com
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- HarfBuzzSharp.NativeAssets.Linux (>= 14.2.1.301)
- HarfBuzzSharp.NativeAssets.macOS (>= 14.2.1.301)
- HarfBuzzSharp.NativeAssets.Win32 (>= 14.2.1.301)
- SkiaSharp (>= 4.153.1)
- SkiaSharp.HarfBuzz (>= 4.153.1)
- SkiaSharp.NativeAssets.Linux.NoDependencies (>= 4.153.1)
- SkiaSharp.NativeAssets.macOS (>= 4.153.1)
- SkiaSharp.NativeAssets.Win32 (>= 4.153.1)
- System.IO.Ports (>= 10.0.13)
- ZXing.Net (>= 0.16.11)
- ZXingCpp (>= 0.5.3)
NuGet packages (4)
Showing the top 4 NuGet packages that depend on ZplCore:
| Package | Downloads |
|---|---|
|
ZplCore.Designer
zplCore Designer – embeddable WYSIWYG label editor for ASP.NET Core: AddZplCoreDesigner() + MapZplCoreDesigner("/designer") serve the editor UI and a stateless render API (design JSON + data JSON in, ZPL/PDF/PNG/SVG out), rendered with the zplCore.com engine. No printing, no storage: the host keeps the design. |
|
|
ZplCore.Import.Print
zplCore.com print import: turns what a Windows label program prints (the EMF print job) into a zplCore label template – texts with font, size and alignment, lines, boxes, images and native barcodes, fields bound by comparing a data print with a placeholder print, optionally fine-tuned against a preview picture. Reads only print jobs, never the label program's files. |
|
|
ZplCore.Testing
zplCore.com Testing+: semantic label assertions for .NET tests (xUnit, NUnit, MSTest – no framework dependency). Assert what a ZPL label prints, not only how it looks: barcodes decode with the expected data and grade, quiet zones, text inside the label, no overlaps or clipping, compliance packs (GS1, Amazon, UPS …), field values, printer fit, and pixel snapshots with an approval workflow and semantic diff. Includes the label check runner behind 'zplcore check' (JUnit XML, SARIF, text) for CI and pull requests. |
|
|
ZplCore.VectorLift
zplCore.com Vector-Lift: converts PDF and SVG labels (e.g. carrier label PDFs) into native ZPL – real text fields, native barcodes, boxes, lines and circles instead of a ^GF raster – with a measured fidelity report. PDF parsing and reference rendering via PDFium (BSD-3-Clause). |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.0 | 40 | 10/27/2026 |