Inviare comandi ZPL a stampanti Zebra in C#

Inviare comandi ZPL a stampanti Zebra in C#

In questo post vedremo come implementare un progetto per Inviare comandi ZPL a stampanti Zebra in C#. Al termine del post saremo in grado di creare un eseguibile che, una volta letto il codice ZPL ricevuto tramite riga di comando, lo invierà ad una stampante Zebra tramite protocollo TPC/IP.


Inviare comandi ZPL a stampanti Zebra in C#

Scopo del progetto

ZPL (Zebra Programming Language) è un linguaggio proprietario della Zebra Technologies utilizzato principalmente nelle applicazioni di etichettatura.
Ha una struttura come questa (che utilizzeremo anche come test)

In questo progetto implementeremo un programma in C# in grado di inviare comandi ZPL alle stampanti Zebra. In pratica riusciremo ad effettuare una stampa richiamando l’eseguibile che andremo a compilare passandogli, come parametro da riga di comando, il percorso di un file contenente codice ZPL.
Il programma è stato testato con il modello ZTC ZT420-300dpi ZPL per la stampa delle etichette in formato A5, e con il modello ZTC ZD420-203dpi ZPL per la stampa delle etichette in formato A6. Opportunamente configurate per poter ricevere i comandi tramite protocollo TCP/IP

Inviare comandi ZPL a stampanti Zebra in C# configurazione TCP/IP

Implementazione del progetto C#

Per l’implementazione utilizzeremo l’ambiente di sviluppo Microsoft Visuali Studio.
Apriamo Visual Studio e clicchiamo su File -> Nuovo -> Progetto per avviare la creazione di un nuovo progetto

Inviare comandi ZPL a stampanti Zebra in C# nuovo file

Selezioniamo come linguaggio di programmazione C# e come tipo di progetto App console (.NET Framework). Diamo un nome al nostro progetto nel campo Nome (se vogliamo possiamo cambiare il percorso in cui salvarlo nel campo Percorso) e premiamo su OK.

scelta del tipo della soluzione ed il nome

Il progetto verrà creato e ci verrà visualizzato l’ambiente di lavoro

Inviare comandi ZPL a stampanti Zebra in C# screen progetto creato

Il nostro progetto prevede di prelevare l’IP e la Porta di comunicazione dal file di configurazione App.config già presente tra le risorse del progetto.
Per poter leggere il file dobbiamo prima aggiungere un riferimento all’Assembly Configuration.
In Esplora Soluzioni clicchiamo con il tasto destro del mouse sulla voce Riferimenti e, dal menù che ci compare, clicchiamo su Aggiungi Riferimento.

aggiungi riferimento

Ci verrà mostrata la schermata per la gestione dei riferimenti. Selezioniamo Assembly nella colonna di sinistra e scorriamo l’elenco degli Assembly disponibili fino a trovare e spuntare la voce System.Configuration
Una volta flaggato l’Assembly clicchiamo su OK

Inviare comandi ZPL a stampanti Zebra in C# gestione riferimenti

Ora possiamo aggiungere i parametri di collegamento alla stampante. Clicchiamo su App.config in Esplora Soluzioni per aprire il file di configurazione.
Una volta aperto aggiungiamo un nodo all’XML, subito sotto il tag </startup>, chiamato appSettings con i due tag (ZplIP e ZplPort) che conterranno l’IP e la Porta della stampante

file di configurazione appSettings

Clicchiamo sul file Program.cs, in Esplora Soluzioni, e cominciamo a scrivere un po’ di codice.
Abbiamo detto che il programma che stiamo realizzando preleverà il codice ZPL da file ricevuti come parametro e lo invierà alla stampante tramite protocollo TCP/IP.
Il file contenente il codice ZPL verrà ricevuto dalla nostra applicazione tramite parametro da riga di comando.
I parametri da riga di comando li recuperiamo dalla variabile args[] presente nella funzione Main().
Istanziamo e inizializziamo la variabile che conterrà il codice ZPL da inviare alla stampante in questo modo

Inviare comandi ZPL a stampanti Zebra in C# file content

In pratica abbiamo creato la stringa zplFileContent e, tramite la funzione ReadAllText() della classe File, la valorizziamo con il contenuto del file.
Se notate la classe File ci viene segnalata come errore. Questo perchè stiamo provando ad utilizzare un oggetto che non abbiamo aggiunto al nostro progetto tramite l’istruzione Using.
Se ci posizioniamo con la freccia del mouse, sulla classe segnalata come errore, Visuali Studio ci propone già le possibili soluzioni da adottare.
Ci basta cliccare sull’icona gialla a forma di lampada e scegliere la soluzione che riteniamo più opportuna.
In questo caso, per usare la classe File, dobbiamo aggiungere l’Assembly System.IO. Dopo aver cliccato su una delle soluzioni disponibili verrà eseguita la correzione scelta.
N.B. possiamo aggiungere l’istruzione anche manualmente subito dopo le altre Using presenti nel progetto.

aggiungere l'assemblu System.IO

Per inviare il contenuto della variabile zplFileContent dobbiamo prima richiamare i parametri di connessione che abbiamo inserito nel file App.config.
Istanziamo una variabile di tipo var e inizializziamola in questo modo

Inviare comandi ZPL a stampanti Zebra in C# Assembly ConfigurationManager

Anche in questo caso l’IDE ci mostrerà un errore legato alla classe ConfigurationManager. Per poterlo risolvere dobbiamo aggiungere l’Assembly Configuration che abbiamo aggiunto come Riferimento.
Possiamo importare l’Assemby come abbiamo visto per la classe File

Inviare comandi ZPL a stampanti Zebra in C# using configurationManager

Inizializziamo due variabili che conterranno l’IP e la Porta della stampante richiamando i tag XML che abbiamo inserito nel file App.Config. Per quanto riguarda la Porta effettuiamo un Parsing da tipo Strig a tipo Int

Recupero dei valori da appConfig

A questo punto abbiamo il codice Zpl e i parametri di connessione alla stampante. Ci resta da effettuare la connessione per poter inviare il codice Zpl alla stampante Zebra.

Per effettuare la connessione e l’invio del codice ZPL alla stampante utilizzeremo la classe TcpClient, presente nell’Assembly System.Net.Sockets, e la classe StreamWriter presente nell’Assembly System.IO in questo modo

Inviare comandi ZPL a stampanti Zebra in C# write ZPL

In pratica al metodo Connect della classe TcpClient passiamo come parametri di connessione l’IP e la Porta della nostra stampante.
Tramite il metodo Write della classe StreamWriter inviamo il codice ZPL.
Una volta terminato l’invio chiudiamo sia il flusso StreamWriter che la connessione TcpClient.

Questo il codice completo del file Program.cs con alcuni commenti utili


Inviare comandi ZPL a stampanti Zebra in C#

Compilazione e utilizzo dell’eseguibile

Ora non ci resta che testare il nostro progetto. Salviamo il progetto da File -> Salva e compiliamolo cliccando su Compilazione -> Compila soluzione

Compilazione progetto ZplPrinter

Se non ci sono stati errori il progetto verrà compilato correttamente e ci verrà mostrato sia l’esito che il percorso in cui è stato salvato l’eseguibile. Nel mio caso il file è stato salvato nella cartella \bin\Debug\ del progetto.
Potete modificare i percorso di salvataggio modificando le proprietà del progetto da Progetto -> Proprietà

Inviare comandi ZPL a stampanti Zebra in C# esito della compilazione

Ora non ci resta che testarlo richiamando il file ZplPrinter.exe da riga di comando e passandogli, come parametro, il percorso di un file contenente il codice ZPL da stampare.
Se non avete già a disposizione il codice ZPL potete utilizzare quello presente all’inizio del post e salvarlo su un file con estensione .txt.
Io per comodità o salvato il file nello stesso percorso dell’eseguibile.

Ora apriamo il prompt dei comandi (CMD) e spostiamoci nel percorso del nostro eseguibile.
Inseriamo il nome del file ZplPrinter.exe e, lasciato un spazio, inseriamo il percorso completo del file .txt

Inviare comandi ZPL a stampanti Zebra in C# esecuzione da riga di comando

Dopo aver premuto su invio verrà avviata la stampa.

Ovviamente il progetto è privo della gestione delle varie eccezioni che possono verificarsi, serve solo come punto di partenza per creare un’applicazione più completa per gestire le stampe.

Potete scaricare l’intero progetto Visual Studio da GitHub a questo link.

A presto 😉

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *