views:

612

answers:

2

Not sure exactly how to word this question ... so edits are welcomed! Anyway ... here goes.

I am currently use Crystal Reports to generated Pdfs and just stream the output to the user. My code looks like the following:

System.IO.MemoryStream stream = new System.IO.MemoryStream();

stream = (System.IO.MemoryStream)this.Report.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);

this.Response.Clear();
this.Response.Buffer = true;
this.Response.ContentType = "application/pdf";
this.Response.BinaryWrite(stream.ToArray());
this.Response.End();

After this code runs it streams the Pdf to the browser opening up Acrobat Reader. Works great!

My problem is when the user tries to save the file it defaults to the actual file name ... in this case it defaults to CrystalReportPage.pdf. Is there anyway I can set this? If so, how?

Any help would be appreciated.

+5  A: 

Usually, via the content-disposition header - i.e.

Content-Disposition: inline; filename=foo.pdf

So just use Headers.Add, or AddHeader, or whatever it is, with:

response.Headers.Add("Content-Disposition", "inline; filename=foo.pdf");

(inline is "show in browser", attachment is "save as a file")

Marc Gravell
+4  A: 
System.IO.MemoryStream stream = new System.IO.MemoryStream();

stream = (System.IO.MemoryStream)this.Report.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);

this.Response.Clear();
this.Response.Buffer = true;
this.Response.ContentType = "application/pdf";
this.Response.AddHeader("Content-Disposition", "attachment; filename=\""+FILENAME+"\"");
this.Response.BinaryWrite(stream.ToArray());
this.Response.End();
Mehrdad Afshari