Alternative zu QZ Tray: drucken ohne Java-Applet auf jedem Rechner

QZ Tray druckt aus dem Browser auf einen lokalen Drucker. Es braucht Java auf dem Rechner und ein Signaturzertifikat für stillen Druck. Hier steht, wann Sie darüber hinausgehen sollten.

QZ Tray löst ein konkretes Problem gut: Eine Webanwendung muss rohes ESC/POS oder ZPL an einen Drucker schicken, der physisch an dem Rechner hängt, auf dem der Browser läuft, und zwar ohne Druckdialog. Browser können das absichtlich nicht, also installiert QZ Tray lokal eine kleine Java-Anwendung, und die Seite spricht über einen Socket mit ihr.

Kurze Antwort: QZ Tray ist von Grund auf clientseitig. Es verlangt Java auf jedem Arbeitsplatz und ein Code-Signing-Zertifikat, wenn gedruckt werden soll, ohne dass eine Bestätigung erscheint. Wird der Druck von einem Geschäftsereignis ausgelöst und nicht von der Person vor dem Bildschirm, entfallen mit der Verlagerung des Aufrufs auf Ihren Server beide Anforderungen.

Zwei Modelle, zwei Fehleroberflächen

QZ Tray Serverseitige Druck-API
Woher der Aufruf kommt Der Browser Ihr Backend
Lokale Installation Java + QZ Tray, je Arbeitsplatz Keine
Zertifikat für stillen Druck Ja Nein
Funktioniert ohne angemeldete Sitzung Nein Ja
Funktioniert auf Tablet oder Handy Nein Ja
Drucker muss physisch angeschlossen sein Ja, an diesem Arbeitsplatz Nein, über das Internet erreichbar
Rohes ESC/POS und ZPL Ja Ja

Wann QZ Tray das richtige Werkzeug ist

Wechseln Sie nicht allein deshalb, weil eine Anforderungsliste lang wirkt. QZ Tray passt gut, wenn:

  • Die Person, die den Druck auslöst, physisch am Drucker steht: ein Tresen, eine Laborbank, ein Versandplatz.
  • Sie auf lokale Hardware drucken, die Sie nicht netzwerkfähig machen können, etwa einen spezialisierten Etiketten- oder Kartendrucker mit proprietärem Treiber.
  • Die Zahl der Arbeitsplätze klein ist und jemand sie administriert.

In diesen Fällen ist die lokale Komponente keine Last, sie ist der Zweck.

Wo es wehtut

Das Zertifikat. Ohne signierte Anfrage zeigt QZ Tray vor jedem Druck einen Bestätigungsdialog. Ihn loszuwerden heißt, ein Code-Signing-Zertifikat zu kaufen, den privaten Schlüssel auf Ihrem Server zu halten, ihn zu erneuern und den Tag zu bewältigen, an dem er abläuft, was sich meist als "plötzlich bekommen alle ein Popup" zeigt.

Java auf jedem Schreibtisch. Ein JRE, das installiert, aktuell gehalten und in einem Security-Review verteidigt werden muss. In Organisationen, die jahrelang Java von den Arbeitsplätzen entfernt haben, ist das oft ein hartes Ausschlusskriterium.

Die Nutzerin muss da sein. Es druckt nichts, wenn der Browser geschlossen ist, die Sitzung abgelaufen ist oder die Bestellung um 3 Uhr nachts eintrifft. Jeder Ablauf, der auf ein Ereignis statt auf einen Klick reagieren soll, passt schlecht.

Supportkosten aus der Ferne. Wenn Ihre Nutzer Kunden statt Kollegen sind, betreuen Sie nun Installationen auf Rechnern, die Sie nicht sehen.

Den Aufruf auf den Server verlagern

Wenn Drucken die Folge eines Ereignisses ist (eine bezahlte Bestellung, eine erstellte Sendung, ein zugewiesenes Ticket), ist der natürliche Ort für den Aufruf dort, wo dieses Ereignis ohnehin verarbeitet wird:

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: `bestellung-${orderId}` }),
});

Keine Installation, kein Zertifikat, kein Browser. Der Drucker wird über seine eigene ausgehende Verbindung erreicht: entweder ein Cloud-Drucker oder ein vorhandener USB-Drucker hinter einem Raspberry-Pi-Adapter, was dem am nächsten kommt, was QZ Tray lokal getan hat.

Ein sinnvoller Mittelweg

Sie müssen sich nicht global entscheiden. Viele Teams behalten QZ Tray für die vom Personal ausgelösten Drucke am Tresen und verlagern ereignisgetriebene Drucke (Bestellbestätigungen, Küchenbons, per Batch erzeugte Versandetiketten) auf den Server. Beide bestehen ohne Konflikt nebeneinander, und der serverseitige Weg ist der, der nachts weiterläuft.

Beginnen Sie damit, im kostenlosen Tarif einen Testbon zu drucken, und zwar aus dem Backend, das das Ereignis bereits verarbeitet.

FAQ

Warum braucht QZ Tray ein Zertifikat?

Ohne signierte Anfrage bekommt die Nutzerin vor jedem Druck einen Bestätigungsdialog. Ein Code-Signing-Zertifikat lässt Ihre Anwendung Anfragen signieren, damit still gedruckt wird, was Kauf, Aufbewahrung und Erneuerung dieses Zertifikats bedeutet.

Kann ich ohne lokale Software aus dem Browser drucken?

Rohes ESC/POS an einen angeschlossenen Drucker nicht: Browser blockieren das bewusst. Sie können aber Ihren Server den Auftrag an einen über das Netz erreichbaren Drucker schicken lassen, womit der Browser vollständig aus dem Weg ist.

Unterstützt eine serverseitige API rohes ESC/POS und ZPL?

Ja. Rohe Befehlsdaten lassen sich über die Druck-API senden, sodass Etiketten- und Bonformate, die Sie bereits erzeugen, weiter funktionieren.

Kann ich QZ Tray für einen Teil der Drucke behalten?

Ja, und oft ist das der richtige Entwurf. Behalten Sie es für die vom Personal ausgelösten Drucke am Tresen und verlagern Sie ereignisgetriebene Drucke auf den Server; die beiden stehen sich nicht im Weg.