Criando PDF com Crystal Reports e ASP.NET (sem gravar no servidor)
Márcio José Araújo da silveira
Fonte: usuário - Aspbrasil
Extraído do site: http://www.aspbrasil.com.br
A geração de arquivos PDF com o método "ExportToDisk" exige que você possua espaço disponível no servidor e também a criação de um job para posterior exclusão dos arquivos.
Utilizaremos aqui o método "ExportToStream" que direciona a saída do export diretamente para o usuário que a solicitou.
O código abaixo foi adaptado do original em : http://www.explosivedog.com/blog/archive/2004/03/22/211.aspx
Segue o exemplo comentado:
private void Page_Load(object sender, System.EventArgs e)
{
oleDbDataAdapter1.Fill(dataSet11.Authors);
Relatorio rel = new Relatorio(); // instancia um relatório gerado no Crystal Reports que acompanha o Visual Studio
rel.SetDataSource(dataSet11);
// utilizando o ExportToStream.
System.IO.Stream st = rel.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
// criar um Leitor de Binários para receber o stream
System.IO.BinaryReader br = new System.IO.BinaryReader(st);
// cria um vetor de bytes do tamanho do stream
byte[] vet = new byte[st.Length];
// Carrega o vetor de bytes
for (int x = 0; x < (st.Length); ++x)
vet[x] = br.ReadByte();
// Limpa o cabeçalho da página de saída
Response.ClearContent();
Response.ClearHeaders();
// Altera o tipo de saída para pdf.
Response.ContentType = "application/pdf";
// escreve o vetor na saída
Response.BinaryWrite(vet);
// exibe
Response.Flush();
// Fecha o Response (se não dá erro de arquivo não finalizado)
Response.Close();
rel.Close();
}