QZ Tray risolve bene un problema preciso: un'applicazione web deve inviare ESC/POS o ZPL grezzi a una stampante collegata fisicamente alla macchina su cui gira il browser, senza finestra di stampa. I browser non possono farlo di proposito, quindi QZ Tray installa in locale una piccola applicazione Java e la pagina le parla attraverso un socket.
Risposta breve: QZ Tray è lato client per progettazione. Richiede Java su ogni postazione, e un certificato di code signing se volete che la stampa avvenga senza finestra di conferma. Se la stampa è innescata da un evento di business e non dalla persona davanti allo schermo, spostare la chiamata sul vostro server elimina entrambi i requisiti.
Due modelli, due superfici di guasto
| QZ Tray | API di stampa lato server | |
|---|---|---|
| Da dove nasce la chiamata | Il browser | Il vostro backend |
| Installazione locale | Java + QZ Tray, per postazione | Nessuna |
| Certificato per la stampa silenziosa | Sì | No |
| Funziona senza sessione aperta | No | Sì |
| Funziona su tablet o telefono | No | Sì |
| La stampante deve essere collegata fisicamente | Sì, a quella postazione | No, raggiungibile via internet |
| ESC/POS e ZPL grezzi | Sì | Sì |
Quando QZ Tray è lo strumento giusto
Non cambiate solo perché un elenco di requisiti sembra lungo. QZ Tray va bene quando:
- Chi lancia la stampa è fisicamente alla stampante: un bancone, un banco di laboratorio, una postazione di spedizione.
- Stampate su hardware locale che non potete rendere indirizzabile in rete, come una stampante di etichette o di tessere specializzata con driver proprietario.
- Le postazioni sono poche e qualcuno le amministra.
In quei casi la componente locale non è un peso, è esattamente il punto.
Dove inizia a fare male
Il certificato. Senza richiesta firmata, QZ Tray mostra una finestra di conferma a ogni stampa. Toglierla significa comprare un certificato di code signing, custodire la chiave privata sul vostro server, rinnovarlo e gestire il giorno in cui scade, che di solito si manifesta come "improvvisamente a tutti compare un popup".
Java su ogni scrivania. Un JRE da installare, tenere aggiornato e difendere in una revisione di sicurezza. Nelle organizzazioni che da anni tolgono Java dalle postazioni, questo è spesso un blocco netto.
L'utente deve esserci. Non stampa nulla quando il browser è chiuso, la sessione è scaduta, o l'ordine arriva alle 3 di notte. Qualsiasi flusso che debba reagire a un evento invece che a un clic si adatta male.
Costo di assistenza a distanza. Se i vostri utenti sono clienti e non colleghi, vi ritrovate ad assistere installazioni su macchine che non vedete.
Spostare la chiamata sul server
Quando la stampa è la conseguenza di qualcosa che accade (un ordine pagato, una spedizione creata, un ticket assegnato), il posto naturale per la chiamata è dove quell'evento è già gestito:
await fetch(`https://www.expedy.fr/api/v2/printers/${printerUid}/print`, {
method: 'POST',
headers: {
Authorization: `${process.env.API_SID}:${process.env.API_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ printer_msg: ticket, origin: `ordine-${orderId}` }),
});
Nessuna installazione, nessun certificato, nessun browser. La stampante viene raggiunta tramite la sua connessione in uscita: o una stampante cloud, o una stampante USB già presente dietro un adattatore Raspberry Pi, che è l'equivalente più vicino a ciò che QZ Tray faceva in locale.
Una via di mezzo utile
Non dovete scegliere in modo globale. Molti team tengono QZ Tray per le stampe lanciate dall'operatore al bancone, e spostano sul server le stampe guidate dagli eventi (conferme d'ordine, comande di cucina, etichette di spedizione generate da un job batch). I due convivono senza conflitto, e la via lato server è quella che continua a funzionare di notte.
Cominciate col stampare uno scontrino di prova con il piano gratuito dal backend che già gestisce l'evento.
FAQ
Perché QZ Tray ha bisogno di un certificato?
Senza richiesta firmata, l'utente riceve una finestra di conferma prima di ogni stampa. Un certificato di code signing permette alla vostra applicazione di firmare le richieste per una stampa silenziosa, il che comporta acquistare, custodire e rinnovare quel certificato.
Posso stampare dal browser senza software locale?
ESC/POS grezzo verso una stampante collegata no: i browser lo bloccano di proposito. Potete però far inviare il lavoro dal vostro server a una stampante raggiungibile in rete, il che toglie del tutto il browser dal percorso.
Una API lato server supporta ESC/POS e ZPL grezzi?
Sì. I dati di comando grezzi possono essere inviati tramite l'API di stampa, quindi i formati di etichetta e scontrino che già generate continuano a funzionare.
Posso tenere QZ Tray per alcune stampe?
Sì, ed è spesso il progetto giusto. Tenetelo per le stampe lanciate dall'operatore al bancone e spostate sul server quelle guidate dagli eventi; i due non entrano in conflitto.