miércoles, 5 de enero de 2011

Impresión Sin Diálogo de Confirmación

Muchas veces es necesario imprimir directamente en una impresora al finalizar algún proceso o un paso específico en un sistema. Para ello, existe un método en Javascript que permite hacerlo, en conjunto con alguna configuración de seguridad del navegador.
El código está probado en IE >= 5, aunque en 7, al parecer tiene un pequeño cambio. El código está basado en el método ExecWB, el cual es una función del COM Web Browser Control de IE.
Se puede encontrar la documentación completa de ese ítem en http://msdn.microsoft.com/en-us/library/aa752087%28VS.85%29.aspx.


Código HTML:
<object ID="ObjetoImpresionAutomatica" WIDTH=0 HEIGHT=0 CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></object>
<!-- Este objeto permite la impresión directamente, sin el diálogo de confirmación o impresión automática  -->
<!-- Lo ideal es introducir este objeto en la cabecera o, al menos, previo al llamado de la impresión -->

JAVASCRIPT:
<script language="javascript">
ObjetoImpresionAutomatica.ExecWB(6,2); // Comando que realiza llamado al menù de impresión de Opción File, utilizando el objeto instanciado anteriormente. En versiones anteriores a 5, utilizar 6,-1
ObjetoImpresionAutomatica.outerHTML = "";
</script>

Ejemplo completo:
<object ID="PrintCommandObject" WIDTH=0 HEIGHT=0 CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></object>
<html>
<head>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div align="center">
Mensaje de prueba
</div>
<script language="javascript">
PrintCommandObject.ExecWB(6,2);
PrintCommandObject.outerHTML = "";
</script>
</body>
</html>
Configuración de Seguridad del Navegador
Cuando ejecuten el proceso, dependiendo de la configuración de seguridad de su navegador, deberán permitir activeX no firmados con su permiso de ejecución correspondiente, como muestra la figura para IE:

Para Firefox en about:config deben agregar un nuevo item del tipo boolean con el nombre “print.always_print_silent” y el valor lógico "true". Con eso está ok.
espero que les sirva. Saludos!
Leer más...