【发布时间】:2013-12-10 09:01:13
【问题描述】:
我正在使用第三方软件从 html 文档呈现 PDF。我创建了一个小型测试项目,并使用 <asp:Button> 的 OnClick 事件,我能够从目录中读取 html 文档并将其呈现为 PDF,没有任何问题。
响应创建如下:
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 中查看响应时,我可以看到 Content-Type 设置正确:
内容处置:内联;文件名=HtmlToPdf.pdf;
内容长度:101482
内容类型:应用程序/pdf
我已尝试将上述内容转移到我当前的项目中。唯一的区别是,我使用的是 DevExpress 网格视图中的自定义按钮,而不是一个 <asp:Button>。我最初在回调面板中处理了自定义按钮单击,但没有设置 Content-Type。在 Chrome 中查看响应证明了这一点:
内容处置:内联;文件名=5.pdf;
内容编码:gzip
内容长度:149015
内容类型:文本/纯文本;字符集=utf-8
我也尝试过使用gvDocuments.CustomButtonCallback += new ASPxGridViewCustomButtonCallbackEventHandler(gvDocuments_CustomButtonCallback); 事件,但仍未设置 Content-Type。
有人知道为什么我不能在上述场景中设置 Content-Type 吗?
【问题讨论】:
-
PDF 看起来还可以吗?似乎 IIS 管道中的某些东西正在应用压缩,您是否尝试过禁用它?
-
它甚至不渲染。响应是 200 OK,但 Content-Type 是 text/plain。我在本地调试,所以它与 VS Development Server 一起使用。是否有任何理由不应该在回调/网格视图自定义按钮单击事件中设置它?
标签: c# asp.net pdf webforms httpresponse