Qu’est-ce que QZ Tray Lite ?
Plateau QZ Lite est un serveur d'impression local qui émule entièrement le protocole QZ Tray mais sans son infrastructure massive. Il permet d'imprimer des reçus sur des imprimantes thermiques directement depuis votre navigateur en utilisant qz-tray.js - et votre code frontend nécessite zéro changement.
Si vous avez déjà configuré le QZ Tray d'origine pour une impression silencieuse, vous connaissez la difficulté : générer des paires de clés, distribuer des certificats, configurer un point de terminaison de signature back-end, collecter {appel, paramètres, horodatage}, calculez l'hexagone SHA-256, signez-le avec la clé privée RSA, renvoyez base64 au navigateur et priez. Toute erreur — et au lieu d'un reçu, votre utilisateur voit un message « Autoriser ? » dialogue.
QZ Tray Lite supprime tout cela.
-
Le
signatureetsigneAlgorithmeles champs sont ignoré. Votre client envoie des signatures comme d'habitude et reçoit des réponses positives : il ne sait jamais qu'il s'adresse à une implémentation différente. -
Aucun point de terminaison de signature backend requis. La chaîne de confiance se réduit à seulement deux parties : navigateur ↔ processus local.
-
Réutilise les certificats existants, par exemple à partir d'un QZ Tray installé (Windows fait déjà confiance
CN = hôte local), ou vous pouvez fournir votre propre PKCS#12.
Avantages clés
| Fonctionnalité | Plateau QZ original | Plateau QZ Lite |
|---|---|---|
| Taille d'installation | 164 Mo, 232 fichiers (y compris JRE) | 90 Ko, 15 .py fichiers |
| Durée d'exécution | Java intégré | Python 3.12+ (déjà sur votre système) |
| Exigences d'impression silencieuse | Certificat + backend de signature + configuration des boîtes de dialogue | Rien de plus |
| Modifications du front-end | — | Aucun — qz-tray.js fonctionne tel quel |
| Lisibilité du code | 40 Mo de bytecode | 2 600 lignes avec commentaires |
| Basculement automatique des ports | Oui | Oui |
Comment ça marche
Le navigateur se connecte via WebSocket à localhost (wss://8181 ou ws://8182). QZ Tray Lite répond aux mêmes appels que l'original :
-
obtenir la version— rapports 2.2.6 (compatibles avec lesqz-tray.js); -
certificat— accepte le certificat du client et confirme ; -
imprimantes.find/imprimantes.getDefault— énumère les imprimantes système viawin32print; -
imprimer- met les travaux en file d'attente pour l'impression.
A file d'attente séquentielle par imprimante garantit que les copies ne s'entrelacent pas et que les travaux longs ne bloquent pas le WebSocket.
Modes d'impression pris en charge
1. ESC/POS brut
-
Texte avec sélection d'encodage (CP1250–CP1258, IBM8xx, ISO-8859-x, GBK, Big5, Shift_JIS, UTF-8).
-
Cyrillique:
CP1251+ESCtcommande dans le reçu (le numéro de page dépend du firmware). -
Images : prise en charge totale de
ÉCHAP *(simple/double/triple, y compris Legacy) etGSv0. Quantification:luma,alpha,noir. -
Activé via
tapez : "brut"avecoptions.langue : "escpos".
2. Impression de pixels (GDI)
-
Impression raster via le pilote d'imprimante avec
échelleContenu,marges,unités(pouces ou mm). -
Non
options.languerequis — idéal pour les logos, les codes-barres et les étiquettes. -
Activé via
tapez : "pixels".
Considérations de sécurité
Important: QZ Tray Lite est conçu pour postes de travail de caisse fiables dans les réseaux locaux. C'est ce qu'il fait délibérément pas valider:
-
demander des signatures (
signature,signeAlgorithme); -
certificats clients et chaînes de confiance ;
-
horodatages (fenêtre de ± 15 minutes dans l'original) ;
-
autorisé.dat/bloqué.datcontrôle d'accès.
Implication pratique : n'importe quelle page ouverte dans le navigateur sur cette machine peut être imprimée. Il s'agit d'un compromis acceptable pour un ordinateur de point de vente dédié. Cependant, ne pas exposer le serveur sur 0.0.0.0 ou utilisez-le sur des machines sur lesquelles les utilisateurs parcourent des sites Web arbitraires.
Toutes les actions sont enregistrées - chaque requête, chaque octet, chaque URL chargée via format : "image" sans explicite saveur.
Installation et démarrage rapide
Exigences: Windows 10/11, Python 3.12+
git clone <dépôt> cd qz-tray-lite Python -m pip installer -r exigences.SMS
Courir:
python principal.py
Le serveur automatiquement :
-
trouve un port libre (si 8181 est occupé, essaie 8282, etc.) ;
-
utilise le certificat du QZ Tray d'origine s'il est installé, ou permet une personnalisation
--keystore/--storepass; -
démarre les écouteurs WSS et WS pour des raisons de compatibilité.
Opération en arrière-plan : compris outils/service.ps1 installe QZ Tray Lite en tant que service Windows ou tâche planifiée (sélectionnée automatiquement en fonction de l'environnement). Prend en charge la rotation des journaux, la surveillance de l’état et les politiques de redémarrage.
Ce qui n'est PAS implémenté
Nous avons intentionnellement omis des fonctionnalités rarement utilisées dans les scénarios de point de vente :
-
en série,USB,caché,déposer,mise en réseau; -
imprimantes.détail,démarrerl'écoute/obtenir le statut; -
impression de pixels à partir de
pdfetHTML; -
encodage d'image : GS_L,quantification : tramage,rotation/orientation.
Les appels à ceux-ci renvoient des erreurs claires plutôt que d’échouer silencieusement.
Test et débogage
Le outils/probe.py utilitaire:
-
effectue une poignée de main QZ Tray ;
-
envoie des travaux d'impression de test (le logo en damier détecte les décalages de bits, le cadre détecte l'écrêtage des bords) ;
-
démontre que les signatures ne sont pas validées — même les signatures invalides sont acceptées.
outils/sonde python.py --imprimer XP-58 # reçu de test outils/sonde python.py --imprimer XP-58 --pixels # mode pixel
65 tests unitaires pour le convertisseur d'image ESC/POS (831 lignes) — octets attendus calculés manuellement par rapport aux spécifications Epson.
À qui est-ce destiné ?
-
Développeurs de systèmes de point de vente qui souhaitent éliminer les QZ Tray encombrants et simplifier le déploiement sur des centaines de postes de travail.
-
Intégrateurs fatigué de configurer des certificats et de signer des backends pour chaque magasin.
-
Propriétaires d'entreprise qui ont un site avec
qz-tray.jsmais vous avez besoin d'un serveur d'impression local stable et rapide pour les reçus thermiques de 58 mm. -
Amateurs qui apprécient le code transparent et souhaitent voir exactement ce qui est envoyé à l'imprimante (les journaux affichent chaque octet et paramètre de conversion).
Licence
Licence MIT © 2026 IDNK Doux
Gratuit pour un usage commercial, une modification ou une intégration : conservez simplement le texte de la licence et la mention de droit d'auteur.
La compatibilité du protocole QZ Tray est basée sur l'original qzind/plateau projet (LGPL-2.1). QZ Tray Lite est une implémentation Python indépendante du protocole côté serveur.
Choisir Plateau QZ Lite - l'alternative légère qui fait exactement ce dont votre point de vente a besoin, et rien de plus.
Serveur local d'impression silencieuse de tickets, compatible avec le protocole QZ Tray, utilisant le même protocole WebSocket
Serveur d'impression de reçus léger et silencieux pour terminaux POS. Entièrement compatible avec QZ Tray – aucune modification de code n’est nécessaire. Imprime sur des imprimantes thermiques 58 mm avec texte, images et support cyrillique. Pas de signature backend, pas de certificats, pas de boîtes de dialogue. Seulement 90 Ko, alimenté par Python. Détection automatique des ports.
Commentaires (0)
Votre avis ne peut pas être envoyé
Signaler le commentaire
Signalement envoyé
Votre signalement ne peut pas être envoyé