martes, 7 de abril de 2009

Por que no aparece el icono de Imprimir con Reporting Services (rdlc)?

He estado trabajando ultimamente con Reporting Services 2005 con definición de reportes en el cliente (rdlc), pero me he topado con la sorpresa de que el control ReportViewer que viene incorporado en .Net 2005 no proporciona compatibilidad de impresión.


Lo que Microsoft recomienda es:
1. utilizar la opción de impresión del navegador (IE, Firefox, Safari)
2. exportar a PDF o Excel ya que estos dos brindarían mejores acabados de impresión.

Pero en ocasiones por cuestiones de seguridad y requerimientos del usuario no es posible habilitar la opción de exportación a otro formato.

De modo que aquí tendríamos dos posibles soluciones.

1. Utilizar el servidor de Reporting Services, ya que cuando se está trabajando con dicho servidor si se habilita la funcionalidad del botón de impresión.

2. Imprimir directamente nuestro reporte a una impresora ya predeterminada.

A continuación desarrollaremos un ejemplo pequeño de como enviar directamente a la impresora un Reporte de tipo rdlc.


Primero debemos incluir los siguientes Imports.







Ahora crearemos 3 variables que se utilizaran para almacenar los objetos de tipo stream y los nombres de los archivos temporales a crear.



Se debe crear un botón donde coloquemos la funcionalidad de impresión, de modo que este botón estaría realizando el llamado al reporte, la carga de datos del reporte (pasar el datasource), luego realizar la exportacion del reporte a archivos temporales de tipo emf y posteriormente enviar a impresora cada uno de estos archivos por medio del método Print.








Crearemos un método llamado CreateStream el cual se va a invocar posteriormente en el método render del reporte que están en el método Export.









Posteriormente creamos el método Export, el cual se encarga de enviar los parametros de margenes y tamaño de pagina para los archivos emf y además invoca al método CreateStream.









Ahora se crean los métodos Print y PrintPage los cuales se encargan de enviar todos los archivos emf a la impresora seleccionada.
















Con el codigo anterior se puede enviar sin ningun problema un reporte directamente a impresora, queda pendiente para hacer una solución más elegante, mostrar un cuadro de dialogo donde se listen las impresoras disponibles en la maquina del usuario, pero eso será para una segunda entrega de este artículo.


Cualquier mejora que se le pueda hacer al codigo será bienvenida.

P.D. Si alguien sabe como subir archivos en este blog se lo agradecería para poder subir el ejemplo. De momento me pueden escribir a info@infodotnet.com para enviarles el ejemplo por correo.

2 comentarios:

  1. Muy buen artículo, pero en mi caso no me sirve de mucho, ya que las impresoras de donde se mandarán están en red, sin embargo, puedo adaptarlo con funcionalidad de red, en dado caso es mejor exportar a excel e imprimirlo desde alli. Buen blog!

    ResponderEliminar
  2. Hola, gracias por el artículo, está muy bueno.
    Un consulta:
    ¿Cómo podría generar un reporte RDLC directamente a PDF?
    Mil gracias.

    ResponderEliminar