mattruma
mattruma

Reputation: 16687

How to set the name of the file when streaming a Pdf in a browser?

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.

Upvotes: 10

Views: 10224

Answers (2)

Mehrdad Afshari
Mehrdad Afshari

Reputation: 422270

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

Upvotes: 7

Marc Gravell
Marc Gravell

Reputation: 1064184

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")

Upvotes: 18

Related Questions