java - 为什么生成的 PDF 在 Internet Explorer 中可以正常显示,但在 FireFox 或 Chrome 中却不能?

标签 java servlets pdf itext

我正在使用 lowagie/iTextPDF 在 Java 中生成 PDF,并且在 Firefox 和 Chrome 中显示输出时遇到问题,但 IE8 可以正常显示它们。

Firefox 和 Chrome 显示乱码,如下所示:

%PDF-1.4 %���� 2 0 obj <>流 x���1 B1 C��# @� 0#�� Tm>}Zh�nO?8���1�a ����y�ٓ B���$��:9XC�a.�/f{���$� o�-$?ר � ^�c�/��'E�j��} WT�/��Y< ?� �5* endstream endobj 4 0 obj <>>>/MediaBox[0 0 612 1008]/旋转 90>> endobj 1 0 obj <> endobj 3 0 obj <> endobj 5 0 obj <> endobj 6 0 obj <> endobj 外部参照 0 7 0000000000 65535 f 0000000379 00000 n 0000000015 00000 n 0000000467 00000 n 0000000211 00000 n 0000000530 00 000 n 0000000575 00000 n 预告片 <]/Info 6 0 R/Size 7>> startxref 697 %%结束符

这是 servlet 代码的一部分:

ByteArrayOutputStream baos = new ByteArrayOutputStream();                      
Document reportPDFDocument = (Document)generateReport(request,conn,baos);             
PdfWriter.getInstance(reportPDFDocument, baos);
response.setHeader("Expires", "0");
response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma", "public");
response.setContentType("application/pdf");       
response.setHeader("Content-disposition","inline; filename=PrintedSchedule.pdf");
ServletOutputStream out = response.getOutputStream();
baos.writeTo(out);
out.flush();

我已经尝试更新 Firefox、更新 PDF 插件,并确保将其设置为使用 Adob​​e 的 PDF 查看器而不是 Firefox 的查看器。

作为测试,我更改了这一行:

来自:

 response.setHeader("Content-disposition","inline; filename=PrintedSchedule.pdf");

致:

 response.setHeader("Content-disposition","attachment; filename=PrintedSchedule.pdf");

Internet Explorer 似乎识别出正在下载的是 PDF。我在 IE 中看到一个弹出窗口,上面写着:

您要打开还是保存此文件:

名称:PrintedSchedule.pdf 类型:ADobe Acrobat 文档

但是 FireFox 认为这是一个“htm”文档,并给出以下内容:

您选择打开:

PrintedSchedule.pdf 这是一个:HTML 文档

在 Firefox 中,我选择 Adob​​e Reader 打开它,它工作正常。但在标题栏中,我注意到它在文件名末尾附加了“.htm”。

这可能是解决问题的线索吗?如果是这样,我怎样才能强制 Firefox 将其识别为 PDF?用户希望 PDF 显示在浏览器中,而不是弹出窗口中,并且他们不希望单独下载 PDF 文件。

最佳答案

http://itextpdf.com/examples/iia.php?id=173您忘记设置内容长度,请尝试在 ServletOutputStream out = response.getOutputStream();

之前添加 response.setContentLength(baos.size());

关于java - 为什么生成的 PDF 在 Internet Explorer 中可以正常显示,但在 FireFox 或 Chrome 中却不能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16407156/

相关文章:

java - JPA继承: same property in different subclasses

java - 如何从非资源文件中解析xml

java - CrudRepository 过滤器 List<String> 属性中的字符串值

java - 托管 java web 应用程序时在哪里保存文件路径?

java - Servlet 安全过滤器

java - 使用Java中的doGet()编写HTML代码

java - 有时 HttpURLConnection.getInputStream 执行速度太慢

ios - 苹果 PDFKit 上错误的高亮注释

javascript - 如何检测页面上的链接 PDF 并显示使用 jquery 下载 Adob​​e 阅读器的消息?

javascript - 在 Adob​​e Acrobat 的 Javascript 中使用逗号格式化货币