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