java - 根据 HTTP 请求创建的 PDF 无法在 Internet Explorer 中打开

标签 java internet-explorer pdf flying-saucer

我有一个 servlet,它根据请求中的某些参数动态生成 PDF 以响应。当我尝试在 IE 中打开/下载此文件时,我收到以下消息:

“无法从 [站点] 下载 [文件名]。 无法打开此 Internet 站点。请求的站点不可用或找不到。请稍后再试。”

这是我设置的响应:

response.setHeader("Content-Disposition", "attachment;filename=" + title + ".pdf");

response.setContentType("application/pdf");

在其他浏览器上一切正常。

更新:

我试过内联而不是附件。这将打开一个新窗口而不是打开/保存对话框(我更愿意有对话框),错误消息消失了,但新窗口在 IE 中只是空的。仍在使用其他浏览器。

我试过简单的、双引号的和没有引号的文件名,它不包含任何未转义的字符。双引号和无引号都没有区别,但单引号附加到文件名,我当然不希望这样。

文件名不包含未转义的字符。

我已经检查了 this 上的测试页面,上面写着 attachement, with filename, no quotes , 为所有浏览器传递。这是从一开始就使用的。

添加 Content-Lenght header 没有任何区别。

顺便说一句,Flying Saucer 用于制作 PDF。

最佳答案

我建议看看 http://greenbytes.de/tech/tc2231/其中列出了一大堆测试用例,用于说明不同浏览器如何使用不同的 Content-Disposition header 值。我的猜测是 title 包含空格或其他一些需要转义的特殊字符,而 IE 目前正在拒绝非转义值。

关于java - 根据 HTTP 请求创建的 PDF 无法在 Internet Explorer 中打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12625108/

相关文章:

android - 如何在PdfViewerActivity中查看本地Pdf?

java - 使用 Java DateTimeFormatter 解析 PDF 日期

java - 在jsp中使用java和html打印列表

java - 在 <Android M 版本中获取 CheckBox 默认 Drawable

IE 和 Firefox 之间的 CSS 差异 : display

css - 如何仅为特定的 IE 浏览器设置 CSS?

java - 加载 keystore 文件,找不到别名

java - spring boot - com.fasterxml.jackson.databind.JsonMappingException : Can not deserialize instance of java. util.ArrayList 超出 START_OBJECT

css - 为什么我的两个表在 IE9 中无法并排显示

iOS 在另一个应用程序中打开 PDF 文件