[VB.NET] Tutorial: stampa termica senza ESC POS

In questo tutorial vedremo come inviare istruzioni ad una stampante termica utilizzando il VB.NET su Visual Studio 2022.

Introduzione

Spesso, per utilizzare una stampante termica è necessario utilizzare i comandi ESC POS, ma non sempre questo è possibile.

In uno dei programmi che ho realizzato, mi sono trovato a dover stampare delle etichette utilizzando una piccola stampante termica che sarebbe stata di corredo alla postazione operatore.

Questa stampante (della HPRT) aveva il suo driver che una volta installato permetteva di utilizzarla come una normale stampante. Quindi inizialmente procedevo a stampare le etichette in formato bitmap. Inutile dire che il risultato era pessimo, ma abbastanza buono da permettere ai codici a barre di essere letti senza problemi.

Finito lo sviluppo principale è venuta l’ora di sistemare quei piccoli difetti residui… tra cui la qualità di stampa delle etichette.

Dopo una rapida ricerca su Google ecco la soluzione: inviare le informazioni di stampa come raw, piuttosto che come bitmap. Inviare le informazioni raw non sarebbe dovuto essere troppo complesso: la stampante aveva un datasheet ben fatto con tutti i comandi ESC POS chiaramente riportati.

Qual è stato allora il problema? Per poter comunicare con la stampante avrei dovuto usare una porta COM, peccato che la stampante era sulla porta USB001. La soluzione standard sarebbe stata di re-installare i driver e configurare una porta COM virtuale, che puntava alla USB001.

Consideriamo adesso che stavo sviluppando un programma su misura per una piccola azienda della mia città. Quindi un programma unico da installare su diversi computer, possibilmente in autonomia cliccando su un semplice installer.

Quindi ho scartato immediatamente la virtualizzazione della porta COM, ed ecco come ho risolto il problema.

Obiettivi

Effettuare stampe di qualità con una stampante termica senza utilizzare una porta virtuale

Procedura

Partiremo dai seguenti presupposti:

  • Hai già scaricato e installato Visual Studio 2022
  • Hai già scaricato e installato i driver della tua stampante
  • La stampante compare nella lista delle stampanti installate

La prima cosa da fare dopo aver creato il progetto è scaricare la libreria Simple .NET POSPrinter e aggiungere il file POSPrinter.vb alla soluzione.

Nota:

Su github troverai anche un progetto dimostrativo che puoi utilizzare come riferimento di utilizzo della libreria e delle sue funzioni

Prima di procedere a utilizzare la libreria dovrai anche includere nel progetto le risorse necessarie:

  • System.Drawing.Printing
  • ZXing
  • ZXing.Common
Schermata del progetto dimostrativo

L’utilizzo della libreria è molto semplice. Sono sufficienti due pulsanti, che volendo possiamo raggruppare in uno solo: il pulsante di selezione stampante e il pulsante di stampa.

Sorvolerò sul primo pulsante (che non fa altro che aprire la finestra di dialogo per la selezione della stampante e memorizzare la scelta) e passerò direttamente a illustrare come procedere con la stampa:

Codice del progetto dimostrativo alla pressione del pulsante di stampa

Come si può vedere dal codice nella schermata qui sopra, alla pressione del pulsante si va semplicemente a:

  1. Si crea un nuovo PrintDocument() chiamato pd
  2. Si associa a pd la stampante selezionata in precedenza
  3. Si aggiunge la gestione di stampa printTestLabel
  4. Si da il comando di stampa

E’ poi necessario specificare cosa deve essere stampato, e questo lo si fa nel gestore di stampa printTestLabel, di seguito una parte del codice:

Una parte del codice di stampa del progetto dimostrativo

Come vedi, si inizia specificando un font tra quelli supportati dalla stampante ed un brush (sempre nero a meno che la stampante non supporti più colori).

Si vanno poi ad utilizzare le funzioni della libreria Simple .NET POSPrinter per stampare:

.PrintText(String)Stampa una stringa e porta il “cursore” alla fine della stringa
.PrintTextLn(String)Stampa una stringa e porta il “cursore” all’inizio della linea successiva (a capo)
.PrintHLine()Stampa una linea orizzontale
.EmptyLine()Lascia una riga vuota
.PrintBarcode(String, BarcodeOptions, BarcodeFormat)Stampa un codice a barre
Un riepilogo delle funzioni di Simple .NET POSPrinter

Conclusione

Siamo riusciti a stampare un semplice esempio attraverso una stampante termica, senza utilizzare né comandi ESC POS né porte virtuali.

All’inizio dell’articolo potete trovare una foto di un’etichetta stampata con questo metodo. Ecco i risultati della stampa come bitmap:

Come si può vedere la qualità delle scritte non è delle migliori, e il codice a barre è decisamente pessimo.

Lascia un commento

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