ASP .NET - ReportViewer - gerando a exibição no formato PDF e XLS
Você pode gerar relatórios usando o add-in ReportViewer para o Visual Web Developer/Visual Basic. Se você não sabe como fazer isso acompanhe os meus artigos sobre o assunto nas referências, pois neste artigo eu vou mostrar como gerar a visualização PDF e XLS a partir do relatório criado no ReportViewer.
O link para download do ReportViewer atualizado(se você ainda não o têm) : Download details: Microsoft Report Viewer Redistributable SP1 2008
Assumindo que você tenha conseguido fazer o download e ter instalado o ReportViewer, o relatório de exemplo que eu vou usar neste artigo em uma página web ASP .NET, exibe os dados da tabela Customers do banco de dados Northwind.mdf
Nota: Para este exemplo eu
vou utilizar o SQL Server 2005 Express e a
tabela Customers do banco de dados Northwind.mdf conforme a figura ao
lado Você pode criar o seu próprio banco de dados e tabelas e gerar relatórios para os seus dados. Para saber como criar um banco de dados, uma tabela e incluir dados no SQL Server 2005 Express leia os artigos:
|
Eu sei que você pode estar pensando : "Mas o Viewer do ReportViewer já apresenta a opção de exportar para PDF ?"
Eu sei mas o recurso que vamos implementar irá gerar a visualização PDF via código diretamente para o usuário com apenas um clique de botão:
Então abra o Visual Studio 2008 Express e crie um novo web site usando o template ASP .NET Web Site com o nome Gerar_PDF;
A seguir selecione a página Default.aspx e a partir da ToolBox , na aba Reporting, arraste e solte o controle MicrosoftReportViewer para o descritor:
Clique no link Design a Report para ativar o assistente e siga a orientação do mesmo efetuando uma conexão com o banco de dados Northwind.mdf e selecionando a tabela Customers;
Selecione os campos CustomerID, CompanyName, City, Region e Country da tabela Customers gerando o DataSource conforme a figura a seguir:
A final informe você terá o relatório com a seguinte estrutura:
Agora volte para a página Default.aspx e inclua um botão de comando abaixo do relatório com o texto Gerar PDF;
Agora vamos incluir o código no evento Click do botão que vai fazer a mágica de gerar a visualização PDF, conforme abaixo:
Inclua a referência : Imports Microsoft.Reporting.WebForms
e as seguintes variáveis:
Dim
warnings As Warning() = Nothinge a seguir o código no evento Click:
Protected Sub btnGerarPDF_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnGerarPDF.Click Dim exportBytes() As Byte = ReportViewer1.LocalReport.Render("PDF", Nothing, mimeType, encoding, fileNameExtension, streamids, warnings) HttpContext.Current.Response.Buffer = True HttpContext.Current.Response.Clear() HttpContext.Current.Response.ContentType = mimeType HttpContext.Current.Response.AddHeader("content-disposition", ("inline; filename=ExportedReport." + fileNameExtension)) HttpContext.Current.Response.BinaryWrite(exportBytes) HttpContext.Current.Response.Flush() HttpContext.Current.Response.End() End Sub |
Na verdade não existe mágica. O processo esta sendo executado pelo método :
LocalReport.Render Method (String, String, out String, out String, out String, out String[], out Warning[])
que processa o relatório e o renderiza no formato especificado.
A sintaxe usada é :
Public Overrides
Function Render ( _
format As String, _
deviceInfo As String, _
<OutAttribute> ByRef mimeType As String, _
<OutAttribute> ByRef encoding As String, _
<OutAttribute> ByRef fileNameExtension As String, _
<OutAttribute> ByRef streams As String(), _
<OutAttribute> ByRef warnings As Warning() _
) As Byte()
Os parâmetros usados são :
Format | O formato no qual o relatório será renderizado. São suportados os formatos : Excel, PDF e Image; |
deviceInfo | Uma string XML que contém a especificação do dispositivo que é requerido para renderizar a extensão especificada no parâmetro format; |
mineType | O tipo MIME do relatório renderizado; |
encoding | O encoding usado quando da renderização do conteúdo do relatório; |
fileNameExtension | A extensão do nome do arquivo usado para o arquivo de saída; |
streams | O identificador stream; |
warnings | Um array de Warning; |
Executando o web site iremos primeiro obter o relatório conforme a figura abaixo:
Clicando no botão Gerar PDF iremos obter a visualização PDF:
Se você quer gerar um arquivo Excel com extensão .xls com o conteúdo do relatório basta incluir mais um botão de comando com o texto - Excel, e, um controle Label na página Default.aspx:
Agora no evento Click do botão de comando Excel inclua o seguinte código:
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click Dim bytes As Byte() bytes = ReportViewer1.LocalReport.Render("Excel", Nothing, mimeType, encoding, fileNameExtension, streamids, warnings) Dim fs As New FileStream("c:\dados\arquivoExcel.xls", FileMode.Create) fs.Write(bytes, 0, bytes.Length) fs.Close() Label1.Text = "Relatório exportado como Excel para o arquivo : c:\dados\arquivoExcel.xls" End Sub |
Abrindo o arquivo Excel em c:\dados\arquivoExcel.xls iremos obter:
Nota: Você pode definir o local que quiser para salvar o arquivo xls.
Pegue o projeto completo aqui : ReportView_PDF.zip
Eu sei é apenas ASP .NET e ReportViewer , mas eu gosto...
Referências:
José Carlos Macoratti