Una funcionalidad que siempre es requerida para cualquier tipo de reporte (en cualquier formato) es su exportación a otros formatos. En Crystal Report para ASP.NET 2.0 tenemos metodos ya disponibles para realizar esta tarea. Una de las preguntas desde los grupos de noticias o foros es como realizarlo desde el codebehind.
Primeramente necesitamos importar los espacios de nombre:
Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
El primero para el reportDocument y el segundo para las opciones de exportacion.
Veamos un ejemplo para exportar a PDF desde el codebehind, sin la necesidad de enviar a impresion (ya que por defecto la impresion viene con salida en modo PDF, y la podemos cambiar a modo ActiveX)
Si tenemos un boton:
<asp:Button ID="btnExportarAPDF" runat="server" Text="Exportar a PDF" />
Podemos hacer algo asi:
Protected Sub btnExportarAPDF_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnExportarAPDF.Click
'Cargar reporte. Enlazando a la fuente de datos.
ReporteCargar()
'Mas adelante veremos que estas lineas las podemos obviar
Response.Buffer = False
Response.Clear() 'ClearContent, ClearHeaders
reporteDoc.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, True, "NombreArchivo")
End Sub
Nota: El metodo ReporteCargar enlaza la fuente de datos al reportDocument que luego lo visualizamos con un ReportViewer, pero en este ejemplo queremos no visualizarlo sino exportarlo
Podemos ver la forma del metodo ExportToHttpResponse
El primer parametro FormatType que es un valor de ExportFormatType con estos
| CrystalReport |
El formato de exportación del informe es un archivo de Crystal Report. |
| Excel |
El formato de exportación del informe es un archivo de Microsoft Excel. |
| ExcelRecord |
El formato de exportación del informe es un archivo Excel Record. |
| HTML32 |
El formato de exportación del informe es un archivo HTML 3.2. |
| HTML40 |
El formato de exportación del informe es un archivo HTML 4.0. |
| NoFormat |
No se ha especificado el formato de exportación. |
| PortableDocFormat |
El formato de exportación del informe es un archivo PDF. |
| RichText |
El formato de exportación del informe es un archivo de texto enriquecido. |
| WordForWindows |
El formato de exportación del informe es un archivo de Microsoft Word. |
Segundo parametro el objeto Response actual (es para "adozarlo").. aqui podemos tener una idea de que dentro del metodo realiza ya los pasos para limpiar la salida de response y adozar el archivo
Tercer parametro, si va o no como un objeto incrustado (inline o attachment) si colocamos True es lo mismo que si estamos limpiando la respuesta y solamente enviando el archivo como parametro esto hara estas lineas innecesarias, ya que el mismo metodo se encargara de realizarlo.
Response.Buffer = False
Response.Clear()
Logrando que al visiante visualice el mensaje de que si desea Abrirlo o Guardarlo
Nuestro código queda mas simple ;)
Protected Sub btnExportarAPDF_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnExportarAPDF.Click
'Cargar reporte. Enlazando a la fuente de datos.
ReporteCargar()
reporteDoc.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, True, "NombreArchivo")
End Sub
Para finalizar podemos decir que este tipo de exportacin tiene un nivel mas general con el metodo .Export del reportDocument que con opciones puede configurarse para la misma tarea, solo que ya tenemos el metodo para enviarlo a la respuesta de la pagina.
Tambien tenemos ExportToDisk (como se imaginaran la misma tarea de exportacion a un archivo fisico), y ExportToStream (a una secuencia de datos en formato especificado). Con este ultimo podemos tambien lograr la salida a response.. pero tendriamos que hacer todos los pasos por nosotros mismos (mas artesanal como siempre digo)
Enlaces:
Comparte este post: