Gerando Stream para PDFs


Há dois dias tive a necessidade de exibir um relatório criado em Crystal Reports em uma Aplicação ASP.NET. Crei o RPT utilizando DataSet tipado como fonte de dados. Tirando a complexidade de fazer o relatório, me deparei em como exibir o tal na Web. Esta fora de cogitação utilizar o CrystalReportViewer, então a solução foi exportar o arquivo *.rpt para PDF.

Inicialmente pensei em utilizar o System.IO para criar o mesmo fisicamente utilizando o Session.SessionID como o nome do arquivo. Funcionou perfeitamente, porém o arquivo estava sendo criado fisicamente, que com isso, ia gerar um grande acúmulo de arquivos no servidor.

Falando com meu Amigo João, ele me sugeriu a criação de um Stream para esta exibição. Bem, não pensei duas vezes e fui logo criar. Com certeza fico bem melhor, pois o arquivo não é mais criado fisicamente, apenas é exibido seu conteúdo no browser. Eis o código em C# para realizar esta tarefa:

using CrystalDecisions.Shared;
using CrystalDecisions.ReportSource;
using CrystalDecisions.CrystalReports.Engine;
using System.IO;

MeuDataSetTipado DS = new MeuDataSetTipado();
MeuRelatorioRPT R1 = new MeuRelatorioRPT();
R1.SetDataSource(DS);

BinaryReader stream = new BinaryReader(R1.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat));
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.ClearHeaders();
HttpContext.Current.Response.ContentType = “application/pdf”;
HttpContext.Current.Response.BinaryWrite(stream.ReadBytes(Convert.ToInt32(stream.BaseStream.Length)));
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.Close();

Anúncios

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s