2008-12-06 42 views
9

不确定如何说出这个问题......所以欢迎编辑!无论如何...在这里。如何在浏览器中传输PDF时设置文件的名称?

我目前使用水晶报表来生成Pdfs,只是将输出流传输给用户。我的代码如下所示:此代码运行

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

之后,它流的PDF浏览器开放Acrobat Reader软件。很棒!

我的问题是,当用户试图保存文件,它默认为实际的文件名...在这种情况下,它默认为CrystalReportPage.pdf。无论如何,我可以设置这个?如果是这样,怎么样?

任何帮助,将不胜感激。

回答

17

通常情况下,通过内容部署头 - 即

Content-Disposition: inline; filename=foo.pdf 

所以只使用Headers.Add,或AddHeader的,或者不管它是什么,有:

response.Headers.Add(“内容-disposition“,”inline; filename = foo.pdf“);

(内联是 “显示在浏览器”,附件是 “保存为文件”)

7
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(); 
相关问题