Files
whatsapp/assets/js/qz-print.js
Lizandro GuarnizoandClaude Sonnet 4.6 5dd6ee5040 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>
2026-07-21 14:52:19 -05:00

49 lines
1.6 KiB
JavaScript

/**
* 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();
}
};