- 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>
49 lines
1.6 KiB
JavaScript
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();
|
|
}
|
|
};
|