turnero: integración QZ Tray para impresión silenciosa en kiosko
- Genera par de llaves RSA (cert en config/qz/) - api/qz_sign.php firma los print jobs con SHA512 - assets/js/qz-print.js conecta QZ Tray y envía trabajo HTML - ver_formulario_enviado.php carga QZ cuando ?autoprint=1 - Fallback a window.print() si QZ no está instalado Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
2cfb77b1a6
commit
5dd6ee5040
@@ -0,0 +1,48 @@
|
||||
/**
|
||||
* qz-print.js — Impresión silenciosa vía QZ Tray
|
||||
* Requiere qz-tray.js cargado antes de este archivo.
|
||||
* Uso: qzPrint({ url, printer })
|
||||
*/
|
||||
window.qzPrint = async function({ printer } = {}) {
|
||||
try {
|
||||
// 1. Conectar
|
||||
if (!qz.websocket.isActive()) {
|
||||
await qz.websocket.connect();
|
||||
}
|
||||
|
||||
// 2. Firma con el servidor
|
||||
qz.security.setSignatureAlgorithm('SHA512');
|
||||
qz.security.setSignaturePromise(function(toSign) {
|
||||
return function(resolve, reject) {
|
||||
fetch('/api/qz_sign.php', { method: 'POST', body: toSign })
|
||||
.then(r => r.text()).then(resolve).catch(reject);
|
||||
};
|
||||
});
|
||||
|
||||
// 3. Certificado público
|
||||
qz.security.setCertificatePromise(function(resolve) {
|
||||
fetch('/config/qz/digital-certificate.txt')
|
||||
.then(r => r.text()).then(resolve);
|
||||
});
|
||||
|
||||
// 4. Seleccionar impresora
|
||||
var p = printer || await qz.printers.getDefault();
|
||||
console.log('[QZ] Impresora:', p);
|
||||
|
||||
// 5. Imprimir la página actual como HTML
|
||||
var cfg = qz.configs.create(p);
|
||||
var data = [{
|
||||
type : 'pixel',
|
||||
format: 'html',
|
||||
flavor: 'plain',
|
||||
data : document.documentElement.outerHTML,
|
||||
}];
|
||||
|
||||
await qz.print(cfg, data);
|
||||
console.log('[QZ] Trabajo enviado correctamente');
|
||||
} catch(e) {
|
||||
console.warn('[QZ] Error:', e.message || e);
|
||||
// Fallback al diálogo del navegador si QZ no está disponible
|
||||
window.print();
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user