Inizia gratis

zplCloud Blog

zplCore.com è arrivato: il motore di etichette di zplCloud come SDK .NET

Il motore dietro ogni anteprima di zplCloud è ora disponibile per le tue applicazioni: rendering ZPL II ed EPL2 misurato su riferimenti fedeli alla stampante, 144 simbologie, verifica preliminare di conformità, scan-proof, gemello digitale della stampante, test delle etichette in CI e un server MCP per gli agenti di coding.

18 min di lettura zplCloud Team

Il motore di zplCloud diventa un SDK

Banner “zplCore.com. The engine, as an SDK.” con una vera etichetta di spedizione renderizzata da zplCore e, accanto, il risultato scan-proof dello stesso file: Code 128, Data Matrix e PDF417 con grado A, l’SSCC GS1-128 con grado D

Ogni anteprima e ogni PDF di zplCloud vengono renderizzati da un unico motore: zplCore.com. Da oggi è disponibile come SDK .NET 10 per le tue applicazioni, con tutte le funzioni che usa zplCloud: renderizzare ZPL II ed EPL2 in PNG, PDF e SVG, creare etichette a partire dai dati, verificarle rispetto alle regole GS1 e dei corrieri, rileggere ogni codice a barre, simulare stampanti, guasti compresi, e stampare. Funziona su Windows, Linux e macOS, in Docker e Kubernetes, senza driver di stampa.

In breve: zplCore.com è una libreria .NET con una CLI, un pacchetto di test e un server MCP. Renderizza come una stampante Zebra virtuale ed è misurato su riferimenti fedeli alla stampante. Oltre al rendering, verifica e simula: verifica preliminare di conformità, scan-proof, gemello digitale della stampante, chaos printer, test delle etichette in CI. Una versione di prova è disponibile su richiesta su zplcore.com.

Perché zplCloud ha sviluppato un proprio motore

Fino a ottobre 2026 zplCloud usava gli SDK ThermalLabel e ZPLPrinter di Neodynamic per le anteprime e per trasformare i design in ZPL. Oggi zplCore.com è l’unico motore di zplCloud: il designer produce ZPL e le anteprime PNG, SVG e PDF renderizzano esattamente quello ZPL. Quello che vedi nell’anteprima è ciò che arriva alla stampante. Non esiste più un secondo percorso per le immagini.

I motivi erano tre:

  • Il metro di misura è la stampante. zplCore viene confrontato pixel per pixel, con una tolleranza di 2 dot, con render di riferimento di Labelary fedeli alla stampante: punteggio medio di 0,986 su 169 casi di test, di cui 131 a 0,99 o più e 85 identici al pixel. Test automatici garantiscono che ogni caso mantenga almeno il punteggio attuale.
  • Il solo rendering non basta. Un’etichetta può sembrare corretta e fallire comunque: un codice a barre nella zona di silenzio, un campo fuori dalla testina di stampa, un SSCC con la dimensione X sbagliata. Volevamo un motore che rispondesse da solo a queste domande, offline e direttamente nella build.
  • Un’unica base di codice per il cloud e per i tuoi server. Le funzioni alla base degli strumenti gratuiti di zplCloud sono le stesse che trovi nell’SDK.

zplCore.com è un’implementazione indipendente basata sulla specifica pubblica ZPL II e sugli standard delle simbologie. Non contiene codice di altri fornitori commerciali; i componenti open source che utilizza sono elencati nelle sue note sui componenti di terze parti.

Cos’è zplCore.com

AmbitoContenuto
Piattaforma.NET 10; testato su Windows 11, macOS, Debian e Azure Linux 3.0 (incluso distroless); Dockerfile e chart Helm inclusi; compatibile con NativeAOT
InputZPL II ed EPL2; i form EPL possono essere convertiti in ZPL
OutputPNG, JPEG, WebP, BMP, GIF, PDF e SVG (entrambi vettoriali), TIFF, PCX, PCL, GRF, EPS, HTML, oltre a EPL, Fingerprint ed ESC/POS
Codici a barre144 simbologie, da Code 128, GS1 DataBar e QR fino a MaxiCode, DotCode e Han Xin; parser e validatore GS1 con 534 Application Identifier
Etichette dai datimodello di etichetta in mm o pollici, modelli JSON, data binding con oggetti C#, EF Core, LiteDB, MongoDB e JSON, streaming a memoria costante
StampaTCP 9100, seriale, USB, spooler di Windows, CUPS; stato ~HS/~HQES; una stampante virtuale su TCP 9100
Scrittureshaping HarfBuzz e bidi per arabo, ebraico, thai, scritture indiane e CJK

Bastano poche righe di C# per ottenere un’anteprima:

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

Cosa significa in dettaglio “fedele alla stampante”:

  • I QR Code (^BQ, modello 2) sono identici modulo per modulo all’output Zebra: selezione della modalità, versione, correzione degli errori e maschera, verificati su oltre 3.600 simboli di riferimento Labelary.
  • PDF417 (^B7) e MicroPDF417 (^BF) sono identici a Labelary a livello di codeword, con la compattazione di Zebra.
  • I set di caratteri (^CI) e ^FH funzionano come sulla stampante: senza ^CI l’etichetta è in code page 850, da ^CI0 a ^CI12 vengono sostituiti i caratteri nazionali, le code page Windows seguono la guida ZPL e con ^CI28 i simboli 2D contengono i byte che codifica la stampante.
  • Comportamento Zebra riprodotto: larghezze di avanzamento del font 0, spostamento della posizione del QR in base all’altezza ^BY, Code 128 in modalità N che resta nel sottoinsieme B, barre larghe come floor(ratio × module).

Ed è anche veloce. In una build release su un Apple M3 Max, zplCore ha generato fino a 199.000 etichette al secondo in ZPL (formato memorizzato, 100.000 etichette in un solo job) e più di 5.000 anteprime PNG al secondo con 10 thread. Ogni misura si può ripetere con un solo comando.

Panoramica delle funzioni

Tutte le immagini e gli output di questa sezione provengono dal motore stesso: dalla documentazione di zplCore, dalla CLI di zplCore o dagli strumenti gratuiti di zplCloud.

Verifica preliminare di conformità

Metà inferiore di un’etichetta pallet SSCC annotata da zplCore: entrambi i codici a barre GS1-128 sono evidenziati in rosso con le regole ZPL3104, ZPL3105, ZPL3106 e ZPL3110

ZplCompliance.Check verifica un’etichetta rispetto a 84 regole raccolte in 8 pacchetti: etichetta logistica GS1, Sunrise 2027 con GS1 Digital Link, Amazon FBA, UPS MaxiCode, requisiti di base FedEx e DHL Paket, UDI e RFID/EPC. Misura l’etichetta renderizzata invece di leggerne il testo: dimensione X in mm, altezza delle barre, zone di silenzio, dimensione dell’HRI, formati degli AI e cifre di controllo. Ogni rilievo riporta ID della regola, riga, posizione e fonte, come testo, JSON, SARIF 2.1.0 o PNG annotato come quello qui sopra. Ecco l’esempio del nostro strumento gratuito Verifica conformità etichette:

$ zplcore comply pallet.zpl --pack gs1-logistic --dpi 203
pallet.zpl:13:1: error ZPL3104: label 1 ^BC: X-dimension 0.25 mm (2 dot(s) at 203 dpi) is below the minimum 0.495 mm for logistic units (0.250 mm only if the unit is physically too small). [GS1 General Specifications 26.0 §5.12.3.5 Table 5-51]
    fix: Use ^BY4 or wider at 203 dpi.
pallet.zpl:15:1: error ZPL3106: label 1 ^BC: GS1-128 needs 10X quiet zones: the left quiet zone (30 dots = 3.754 mm) runs 20 dot(s) past the label edge. [GS1 General Specifications 26.0 §5.4.4.2, §5.4.6.3, Table 5-51]
    fix: Move the barcode or the neighbouring field, or reduce ^BY.
1 label(s) at 203 dpi, packs gs1-logistic GenSpecs 26.0 / LLG 1.3: 6 error(s), 0 warning(s), 2 info(s). Pre-check only, not a certification.

L’output è ridotto a due dei sei errori. Il pacchetto Sunrise 2027 verifica i codici a barre 2D alla cassa; il nostro articolo GS1 Sunrise 2027: codici a barre 2D alla cassa lo mostra nel dettaglio. Importante: si tratta di una verifica preliminare, non di una certificazione. Non sostituisce l’approvazione da parte di un corriere o di un’autorità, né un verificatore sull’etichetta stampata. Documentazione

Scan-proof

Etichetta da scaffale annotata dallo scan-proof di zplCore: l’EAN-13 sul bordo sinistro è evidenziato in rosso con grado F, il QR Code in rosso con grado D, Code 39 e Data Matrix in verde con grado A

ZplScanProof.Verify rilegge ogni codice a barre dalla bitmap renderizzata con due decoder indipendenti (zxing-cpp e ZXing.Net) e confronta il risultato con i dati del campo. Misura dimensione X, zone di silenzio, altezza delle barre, tagli e sovrapposizioni e assegna un grado da A a F: una verifica preliminare digitale modellata sulle norme ISO/IEC 15415/15416, calcolata alla risoluzione della stampante. Nell’esempio del nostro strumento gratuito Prova di lettura codici a barre tutti e quattro i codici a barre vengono decodificati, ma due darebbero comunque problemi (output abbreviato):

$ zplcore verify shelf.zpl --dpi 203
[0.0] ^BE EAN-13 line 7 at 8,80 (285×120 dots, 0°)
  status: Match   digital grade: F (0.0)
  SP1101 error: Quiet zone left: 2.7X, 11X required (ISO/IEC 15420 / GS1); limited by the label edge.
  SP1102 error: The symbol is cut off by the label edge (129 pixels of its ink lie outside ^PW/^LL).
[0.1] ^BQ QR Code line 8 at 600,10 (125×245 dots, 0°)
  status: Match   digital grade: D (1.0)
  SP1101 warning: Quiet zone bottom: 3X, 4X required (ISO/IEC 18004); limited by other ink.

Il Code 39 ottiene una A, ma con un avviso: il testo “ART-4712” accanto sembra la sua riga di interpretazione, ma è diverso dal valore codificato “ART-4711”. Il grado non sostituisce un verificatore calibrato sull’etichetta stampata. Documentazione

Da ZPL a modello di etichetta modificabile

Label.FromZpl trasforma lo ZPL esistente in un modello modificabile e collegato ai dati: testi, codici a barre, forme, immagini e RFID diventano elementi tipizzati, i campi ^FN diventano campi dati e i formati ^DF diventano modelli. Ogni elemento viene confrontato pixel per pixel con l’originale; tutti i 318 file del corpus di test tornano identici al pixel. Ecco per esempio l’etichetta di spedizione del banner:

$ zplcore import hero-label.zpl -o label.json --report
1 label(s), 203 dpi (LabelSize), fidelity 1,0000
  label 1: fidelity 1.0000 pixel-exact, 38 typed, 0 raw item(s)
  Info: Resolution detected as 203 dpi from the label width

zplCloud usa esattamente questo meccanismo per importare ZPL nel designer (maggiori dettagli più avanti). Documentazione

Comprensione delle etichette e oscuramento dei dati per il GDPR

Due etichette di spedizione renderizzate da zplCore: a sinistra l’originale con mittente, destinatario, numero di tracking e codici a barre 2D, a destra la versione oscurata, in cui nomi, indirizzi, numero di tracking e contenuti dei codici a barre sono sostituiti da segnaposto con lo stesso layout

ZplExtract legge dallo ZPL destinatario, mittente, numeri di tracking con cifre di controllo, SSCC, GTIN, date e pesi, ciascuno con la sua posizione e un valore di confidenza. Per l’etichetta qui sopra trova l’indirizzo del destinatario con confidenza 0,95, l’SSCC 340123450000000017 dall’AI GS1 (00) con cifra di controllo valida, il peso e la data. ZplRedact sostituisce i dati personali mantenendo il layout, compresi i commenti ^FX, i dati ^DF/^XF e i contenuti dei codici a barre 2D, inserisce codici a barre fittizi validi e poi ricontrolla: per questa etichetta 28 azioni, 29 valori cercati, 0 rimasti. Il processo si basa su regole e funziona senza rete; controlla il risultato prima di condividerlo. Il testo all’interno delle immagini non viene letto. Documentazione

GS1 Digital Link e migrazione Sunrise 2027

Etichetta alimentare renderizzata da zplCore prima e dopo la migrazione: a destra, accanto all’EAN-13, è stato aggiunto un QR Code con GS1 Digital Link, evidenziato da una cornice verde tratteggiata

ZplGs1Migration.Migrate trova il GTIN in un EAN/UPC, GS1-128, ITF-14 o GS1 DataBar e aggiunge in uno spazio libero un QR Code con URI GS1 Digital Link oppure un GS1 DataMatrix, con la sua zona di silenzio e una verifica preliminare Sunrise del risultato. Lotto e termine minimo di conservazione vengono ripresi dal GS1-128 di questa etichetta (output abbreviato):

$ zplcore gs1 migrate cheese.zpl -o cheese-2d.zpl
label 1: migrated – added a QR Code with GS1 Digital Link URI with GTIN 09506000134352 right of the EAN-13 (^BE, line 9), top-aligned with the bars
  uri: https://id.gs1.org/01/09506000134352/10/L2604?15=270331
sunrise pre-check of the migrated ZPL: 0 error(s), 0 warning(s), 0 info(s)

In zplCloud lo strumento gratuito Migrazione Sunrise 2027 fa lo stesso nel browser. È un assistente di migrazione, non una certificazione. Documentazione

RFID Studio

Etichetta per cartone renderizzata da zplCore con un codice a barre SSCC GS1-128 e il simbolo RFID grigio che le anteprime mostrano per le etichette con un comando di scrittura RFID

ZplRfid codifica e decodifica gli EPC secondo il GS1 EPC Tag Data Standard 2.3 (SGTIN, SSCC, SGLN, GRAI, GIAI e gli schemi “plus” di TDS 2.0) e genera i comandi ^RF corrispondenti. Il controllo di coerenza confronta il tag con l’etichetta stampata. In questo esempio il tag riceverebbe un SSCC diverso da quello mostrato dal codice a barre:

$ zplcore rfid check carton.zpl
carton.zpl:6:1: error ZPL3904: label 1 ^RF: The SSCC-96 EPC encodes SSCC (00) 340123450000000024, but ^BC prints 340123450000000017. [GS1 EPC Tag Data Standard 2.3 §7 (correspondence of EPC and GS1 keys); GS1 General Specifications 26.0 §4.13]
    fix: Encode the printed key, e.g. ZplRfid.EncodeEpc("(00)340123450000000017…") or 'zplcore rfid encode'.

zplcore rfid simulate esegue i comandi RFID di un’etichetta su un tag Gen2 simulato, come farebbe una stampante RFID. Documentazione

Gemello digitale della stampante (Printer Twin)

La stessa etichetta di spedizione da 4 × 6 pollici due volte: a sinistra annotata da zplCore per una ZQ510 con testina da 72 mm, con la parte destra tratteggiata in rosso; a destra l’output come lo stamperebbe la ZQ510, tagliato a 72 mm

Questa etichetta si stampa correttamente su questo modello? ZplPrinterTwin.Check confronta un’etichetta con uno dei 24 profili (tra cui ZD421, ZD621, ZT411, ZT610, ZQ630 e tre profili generici) e segnala campi oltre la larghezza della testina, opzioni mancanti come taglierina o RFID, limiti del firmware, font e memoria, oltre a fornire una stima del tempo di stampa. Ogni dato dei profili è supportato da una fonte citata oppure contrassegnato come sconosciuto. Ecco l’etichetta da 4 × 6 pollici qui sopra su una stampante con testina da 72 mm (uno dei 21 rilievi):

$ zplcore twin check hero-label.zpl --profile ZQ510-203
  ZPL5102 error (53:1): Label 1: ^BC ">;>800340123450000000017" at x=280 is 16 dots (2 mm) wider than the printhead of ZQ510-203 (576 dots = 72 mm): the right part is cut off; a clipped barcode does not scan.
ZQ510-203: 13 error(s), 8 warning(s), 0 info

Documentazione

Chaos printer e anteprima della taglierina

Sei etichette per cartone renderizzate da zplCore su due colonne; sotto le etichette 3 e 6 una linea di taglio rossa tratteggiata con forbici e simbolo di pausa

ZplVirtualPrinter resta in ascolto su TCP 9100, renderizza i job in arrivo e risponde a ~HS e ~HQES come una stampante. Su richiesta va in errore: carta o nastro esauriti, testina aperta, buffer pieno, inceppamento della taglierina, RFID void, disconnessioni, timeout, il tutto tramite script e in modo riproducibile:

printer.Faults.Schedule(ZplFaultKind.PaperOut, ZplFaultTrigger.AfterLabels(3)); // label 4 waits
printer.Faults.Seed = 42;                                                       // deterministic random triggers

La simulazione della taglierina mostra dove taglia una stampante con taglierina (^MM, ^PQ, ^CN, ~JK e altri) e disegna i tagli nelle anteprime PNG, SVG e PDF, come qui sopra: ^MMC con ^PQ6,3 taglia dopo le etichette 3 e 6. Chaos printer · Taglierina

Testing+ e GitHub Action

Codice a barre SSCC di un’etichetta pallet in tre versioni: prima della modifica, dopo la modifica con barre più strette e un SSCC diverso, e come immagine delle differenze in rosso e verde

Le etichette sono codice, quindi vanno testate come codice. Il pacchetto ZplCore.Testing funziona con xUnit, NUnit e MSTest:

ZplAssert.Label(zpl)
    .NoOverlaps()
    .Complies(CompliancePacks.Gs1LogisticLabel)
    .Barcode("SSCC").Decodes("(00)376104250021234569").HasGrade(atLeast: 'B')
    .And.MatchesSnapshot("pallet");

Un test fallito indica l’elemento, la sua posizione e la riga ZPL, e rimanda a un’immagine con l’elemento evidenziato. zplcore check esegue gli stessi controlli su molti file e produce JUnit XML, SARIF e Markdown. La GitHub Action inclusa nell’SDK commenta le pull request con immagini prima/dopo/differenze ed elenca cosa è cambiato. Le immagini qui sopra provengono da un’esecuzione di questo tipo: una modifica ha ristretto il codice a barre SSCC da ^BY4 a ^BY3 e ne ha cambiato i dati (output abbreviato):

$ zplcore check labels/pallet.zpl --pack gs1-logistic --verify --baseline ../base
FAIL labels/pallet.zpl (1 label(s), 0.25 s) · changed vs baseline (3 element change(s))
  FAIL comply gs1-logistic
    labels/pallet.zpl:12:1: error ZPL3104: Label 1: X-dimension 0.375 mm (3 dot(s) at 203 dpi) is below the minimum 0.495 mm for logistic units (0.250 mm only if the unit is physically too small).
    labels/pallet.zpl:12:1: note ZT3001: Label 1: barcode ^BC Code128 at x=86 y=820: data "(00)376104250021234569" → "(00)376104250021234576"
FAILED (fail-on error)

Documentazione

Server MCP per agenti di coding

zplcore-mcp offre 26 strumenti tramite il Model Context Protocol a Claude Code, Claude Desktop, VS Code con GitHub Copilot e Cursor: rendering, lint, formattazione, diff, conformità, scan-proof, oscuramento dei dati, gemello digitale della stampante, GS1 e RFID, tra gli altri. Un agente scrive ZPL, guarda il PNG, legge la diagnostica e corregge l’etichetta in un ciclo continuo.

claude mcp add zplcore -- zplcore-mcp

Il server è progettato per input non attendibili. Comunica solo tramite stdio e non apre porte di rete. Ogni chiamata viene eseguita in un proprio processo worker con limiti di tempo e di memoria e un ambiente vuoto, senza accesso a file, rete, stampanti o variabili d’ambiente; su macOS si aggiunge una sandbox del sistema operativo. Test avversariali, fuzzing e un audit IL dell’assembly verificano queste regole. Documentazione

Da PDF e SVG a ZPL nativo (Vector-Lift)

A sinistra un’etichetta SVG con titolo, ubicazione di magazzino, linea, Code 128, numero di serie e timbro QC; a destra la stessa etichetta renderizzata da ZPL nativo, con testo nel font 0, un Code 128 come ^BC e cornice, linea e cerchio come forme ZPL

Vector-Lift trasforma i PDF o SVG di corrieri ed ERP in vero ZPL anziché in un’unica immagine raster ^GF: testo come campi ^A0, codici a barre decodificati, rigenerati come comandi ^B nativi e verificati, linee e riquadri come ^GB, ^GC e ^GE. Ogni etichetta è accompagnata da una fedeltà misurata:

$ zplcore lift lift-label.svg -o lift.zpl --report
799x400 dots @ 203 dpi (default), fidelity 0.9785 (exact 0.9114), native ink 97.8 %, 370 bytes vs 4,140 bytes ^GF raster (8.9%)
4 native, 5 approximated, 0 raster, 1 dropped, barcodes match

Il testo viene composto nel font 0 invece che nel carattere originale, e il testo presente nel PDF solo come contorni resta un elemento grafico (niente OCR). In zplCloud lo utilizza lo strumento gratuito Da PDF a ZPL nativo. Documentazione

NativeAOT

L’SDK, il pacchetto di test, la CLI e il server MCP si compilano senza avvisi di trimming o AOT. La CLI e il server MCP possono essere pubblicati come programmi nativi che si avviano senza un runtime .NET installato, e uno smoke test confronta il loro output con quello della versione JIT, byte per byte e pixel per pixel. Documentazione

Cosa cambia per gli utenti di zplCloud

Non devi installare nulla, zplCloud funziona già oggi con zplCore.com:

In arrivo: zplCore Server (Docker)

Come passo successivo stiamo preparando il motore come container pronto all’uso con un’API REST: in ingresso ZPL, in uscita PNG, PDF o un report di verifica. Sono previsti un’immagine multi-arch per linux/amd64 e linux/arm64, distroless, eseguita senza root e con file system in sola lettura, gli endpoint /health, /ready e /metrics (Prometheus), una descrizione OpenAPI e immagini firmate con SBOM. Nel nostro test NativeAOT su linux/arm64 il server si è avviato in circa 4 ms, ha renderizzato la prima etichetta in circa 11 ms e l’immagine pesava circa 100 MB. Le funzionalità sono pianificate; su zplcore.com puoi chiedere di essere avvisato quando la prima versione sarà pronta.

Provalo

  • Demo live: zplcore.com/en/demo renderizza ZPL ed esegue nel browser verifica preliminare di conformità, scan-proof, migrazione GS1, estrazione con oscuramento dei dati e gemello digitale della stampante.
  • Documentazione: zplcore.com/en/docs con API, CLI, esempi, accuratezza e limiti noti.
  • Versione di prova: richiedila tramite il modulo di contatto su zplcore.com. Il team di sviluppo risponde direttamente e controlla volentieri i tuoi file ZPL ed EPL. Le licenze sono riservate ai clienti business (B2B).
  • Senza codice: gli strumenti zplCloud gratuiti usano lo stesso motore.

Domande frequenti

zplCore.com è lo stesso motore che usa zplCloud?

Sì. zplCloud renderizza anteprime, PDF e risultati degli strumenti con zplCore.com, e i nuovi strumenti chiamano le stesse funzioni che trovi nell’SDK.

zplCore.com richiede una connessione Internet o un driver di stampa?

No. La libreria gira nel tuo processo, offline, su Windows, Linux e macOS. La stampa avviene direttamente tramite TCP 9100, porta seriale, USB, spooler di Windows o CUPS.

La verifica preliminare di conformità e il grado di scansione sono certificazioni?

No. La verifica preliminare di conformità controlla il rispetto di regole pubblicate, e il grado di scansione è una verifica preliminare digitale modellata sulle norme ISO/IEC 15415/15416. Nessuna delle due sostituisce l’approvazione di un corriere, di un’autorità o della tua Member Organisation GS1, né un verificatore calibrato sull’etichetta stampata.

Cosa non sa ancora fare zplCore.com?

Pharmacode 2D, Response Plus PostMatrix e HIBC secondo ISO/IEC 15434 non sono implementati perché non esiste una specifica pubblica. Deutsche Post BZL e JAB Code sono sperimentali. I font residenti di Zebra sono proprietari e vengono sostituiti da font calibrati equivalenti; se ti servono glifi identici, registra il TTF originale. L’elenco completo è nei limiti noti.

Devo cambiare qualcosa in zplCloud?

No. Design, modelli, stampanti e chiamate API restano come sono.

Zebra e ZPL sono marchi di Zebra Technologies Corporation, GS1 e GS1 Digital Link sono marchi di GS1 AISBL, e Neodynamic, ThermalLabel e ZPLPrinter sono marchi dei rispettivi titolari. Sono citati qui solo a scopo descrittivo.

Altri articoli