Israel Aéce

Microsoft MVP, MCP, MCAD, MCTS, MCPD e MCT

My Links

Blog Stats

Archives

Post Categories

Links

Login

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();

posted on Saturday, July 31, 2004 12:34 PM

Feedback

# re: Gerando Stream para PDFs 10/14/2004 4:05 PM Jefferson Scalizi Pecanha

Amigo,estava procurando por uma solução para visualizar um rpt, pois preciso fazer isso no ambiente Linux, usei sua solução e até agora esta tudo certo,,, vc teve algum tipo de problema usando este metodo?, obrigado
Jefferson

# re: Gerando Stream para PDFs 10/14/2004 9:09 PM Israel Aece

Ola Jefferson,

Utilizei isso ha algum tempo em um projeto ASP.NET e foi a solucao ideal para nao precisar criar os arquivos fisicamente e nao me trouxe nenhum problema.

Abs,

# re: Gerando Stream para PDFs 11/18/2004 9:47 AM André

Como faço para abrir o arquivo em outra janela???

# re: Gerando Stream para PDFs 2/11/2005 10:28 AM Marcio Paulo Mello Martins

Amigo, já aconteceu de a exportação de PDF's só funcionar corretamente quando chamado por uma máquina que tem o Visual Studio? Fiz o mesmo que você, e ele exporta bonitinho ... mas só em máquinas que têm o VS.NET ... em máquinas de produção chamando o aplicativo ASP.NET do servidor, a exportação sai erradinha da silva. Se acesso esse aplicativo de uma máquina com VS.NET, funciona beleza.

Já viu isso acontecer?

Grato ...

# re: Gerando Stream para PDFs 2/24/2005 10:57 AM André Luiz

Israel seu funcionou que foi uma blz.

Obrigado pela ajuda.

# re: Gerando Stream para PDFs 5/23/2006 1:44 PM Weles Saggiorato Siqueira

Ola Israel!

Tenho gerado um Relatorio em Cystal Reports, soh q sem ser typado, mas funciona legal tbm, abaixo vou mandar o codigo se for util para vc!

Tenho um problema eu preciso gerar um pdf pelo crystal, de forma que o usuario nao consiga copiar os dados e estou sem saber como fazer isto, se tiver alguma ideia eu lhe agradeco, meu email eh kweles@gmail.com valeu!


codigo para geracao de pdf com crystal:

var rdDoc : ReportDocument;
S : MemoryStream;
tliCurrent : CrystalDecisions.Shared.TableLogOnInfo;
i : Integer;
begin
rdDoc := ReportDocument.Create;
rdDoc.Load( 'C:\Inetpub\wwwroot\Pagina\Relatorios\Relatorio1.rpt');

S := MemoryStream.Create;
try

tliCurrent := CrystalDecisions.Shared.TableLogOnInfo.Create;

rdDoc.SetDatabaseLogon( usuario,senha );

//se tiver parametro
rdDoc.SetParameterValue( Parametro1, textbox1.text );
rdDoc.SetParameterValue( Parametro1, textbox2.text );

s := ( rdDoc.ExportToStream( ExportFormatType.PortableDocFormat ) as MemoryStream );

Response.Clear;
Response.Buffer := True;
Response.ContentType := 'application/pdf';
Response.BinaryWrite(s.ToArray());
Response.&End;

s.Close;
s.Free;
finally
rdDoc.Free;
end;



# re: Gerando Stream para PDFs 5/17/2007 1:14 AM Anereu Bighetti

Se utilizar esta linha

objReport.ExportToHttpResponse(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, Response, False, "NONE")

Você não precisa criar um stream.
Ele ja cria automaticamente.

[]'s

# re: Gerando Stream para PDFs 5/17/2007 4:01 AM Israel Aece

Ola Anereu,

Legal. Mas me diz uma coisa: qual a versão que está utilizando?

# re: Gerando Stream para PDFs 10/24/2007 12:53 AM Gustavo

Como fica no C#
esse código objReport.ExportToHttpResponse(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, Response, False, "NONE")

# re: Gerando Stream para PDFs 10/25/2007 6:39 AM Israel Aece

Ola,

Não muda nada.

Title  
Name  
Url
Box Code
Protected by FormShield
Comments