Alternativa a QZ Tray: stampare senza un applet Java su ogni postazione

QZ Tray stampa dal browser su una stampante locale. Richiede Java sulla macchina e un certificato di code signing per la stampa silenziosa. Ecco quando andare oltre.

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 No
Funziona senza sessione aperta No
Funziona su tablet o telefono No
La stampante deve essere collegata fisicamente Sì, a quella postazione No, raggiungibile via internet
ESC/POS e ZPL grezzi

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.