2013-11-25 190 views
2

我正在使用第三方软件从html文档呈现PDF。我创建了一个小测试项目,并使用的OnClick事件,我能够从目录中读取html文档并将其呈现为PDF格式,没有任何问题。HttpContext.Current.Response.AddHeader()未设置内容类型标题

的响应创建如下:

HttpContext.Current.Response.Clear(); 
HttpContext.Current.Response.AddHeader("Content-Type", "application/pdf"); 
HttpContext.Current.Response.AddHeader("Content-Disposition", 
    String.Format("{0}; filename=Test.pdf;", "inline")); 
HttpContext.Current.Response.BinaryWrite(pdfBuffer); 
HttpContext.Current.ApplicationInstance.CompleteRequest(); 

当我看到Chrome的响应,我可以看到,内容类型被设置正确:

内容处置:内联;文件名= HtmlToPdf.pdf;

的Content-Length:101482

内容类型:应用程序/ PDF

我已经试过以上转移到我的当前项目。唯一的区别是,而不是一个我在DevExpress网格视图内使用自定义按钮。我最初处理回调面板中的自定义按钮点击,但未设置Content-Type。在Chrome中查看响应证明了这一点:

Content-Disposition:inline;文件名= 5.pdf;

内容编码:gzip

的Content-Length:149015

内容类型:文本/无格式; charset = utf-8

我也试过使用gvDocuments.CustomButtonCallback += new ASPxGridViewCustomButtonCallbackEventHandler(gvDocuments_CustomButtonCallback);事件,但Content-Type仍未设置。

任何人有任何想法,为什么我不能在上面的场景中设置Content-Type?

+0

PDF看起来还好吗?看起来,IIS管道中的某些内容正在应用压缩,您是否尝试禁用该功能? –

+0

它甚至不呈现。响应是200 OK,但Content-Type是文本/纯文本。我正在本地进行调试,因此使用VS Development Server。是否有任何理由不应该在回调/网格视图自定义按钮点击事件中设置? – MattSull

回答

6

您可以尝试

HttpResponse response = HttpContext.Current.Response; 
response.ClearContent(); 
response.Clear(); 

response.ContentType = “应用程序/ PDF格式”;

response.AddHeader("Content-Disposition", "attachment; filename=" + yourFileName + ".pdf"); 
stream.WriteTo(response.OutputStream); 
response.Flush(); 
response.End(); 

希望工程:)

+1

工程就像一个魅力。谢谢! – MattParra

+0

@MattParra欢迎<3 – BMaximus

0
Dim Resp As HttpResponse = HttpContext.Current.Response 
Resp.Headers.Remove("X-Frame-Options") 
Resp.AppendHeader("X-Frame-Options", "SAMEORIGIN") 

通过在页面加载/ init方法将添加HTTP响应报头添加上面的行。