当前位置: 首页 > 知识库问答 >
问题:

为什么生成的PDF可以在Internet Explorer中正确显示,而不能在FireFox或Chrome中显示?

单昊穹
2023-03-14

我正在使用lowagie/iTextPDF生成Java的PDF,并且在Firefox和Chrome中显示输出有问题,但是IE8显示得很好。

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

%PDF-1.4%���� 20 obj

下面是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插件,并确保它设置为使用Adobe的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”文档,并给出了这样的信息:

您选择打开:

打印的时间表。pdf是一个:HTML文档

在火狐中,我选择Adobe Reader打开它,它工作正常。但是在标题栏中,我注意到它在文件名的末尾附加了“. htm”。

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

共有3个答案

陶乐生
2023-03-14

我有答案,我成功地打开了。在新选项卡中的PDF文件,从developerNT透视图单击任一按钮或链接目标应为balnk,例如(目标=\u空白)

卫鸿朗
2023-03-14

尝试添加

response.setHeader("Expires", "0");
response.setHeader("Cache-Control","must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma", "public");
// setting the content type
response.setContentType("application/pdf");
// the contentlength
response.setContentLength(baos.size());
// write ByteArrayOutputStream to the ServletOutputStream
OutputStream os = response.getOutputStream();
baos.writeTo(os);
os.flush();
os.close();

关闭后document.close();

白晋鹏
2023-03-14

每http://itextpdf.com/examples/iia.php?id=173您忘记设置内容长度,请尝试添加响应。setContentLength(bas.size())beforeServletOutputStream out=响应。getOutputStream()

 类似资料:
  • 问题内容: 在Mac上的FireFox中,该圆圈是圆形/实心的。我希望它是虚线或虚线。 使它变得更奇怪的是,相同的属性(即)在HR上可以正常工作。那么,当涉及边界半径时,为什么它不起作用? 这对我来说很奇怪。 问题答案: 这是一个错误,WebKit也有类似的问题,但已在6月修复。 这是Firefox中所有其他突出的边界半径缺陷。

  • 目前我们正在使用Aspose。NET库生成excel并导出为PDF。pdf由多种语言组成,如英语、汉语和泰米尔语。对于英语和汉语来说,这很好,但对于泰米尔语来说,它有拼写问题。 例如, "போல்" 的第一个和第二个字母将翻转。 我们尝试了“Latha”字体和“Arial Unicode MS”字体,文本显示,但字母翻转。我们也尝试过“InaiMathi”字体,但文本没有显示出来。 我也尝试使用不

  • 我正在用apache fop库(v2.2)生成PDF文件。如果我从Eclipse IDE运行应用程序,所有运行都没有问题,但是如果我从Eclipse IDE生成JAR,并且库处理设置为将所需的库提取到生成的JAR中,然后我将运行JAR,它将生成没有图像的PDF文件(文本如预期的那样可见)。首先我认为这是由无效的文件路径引起的,但是如果我直接在XSL中使用base64编码的图像,图像仍然不可见。如果

  • 问题1我创建了一个文本字段,如上面的代码所示,并尝试使用TextBox.setValue(“测试值”)设置值;方法,但它给出的错误如下所示: 问题3 为了解决问题#2,我需要将NeedExceptions标志设置为true,如下所示,然后在PDF中正确显示该字段值。但是在这个解决方案之后,一旦用户改变了字段值,我们再次解析这个PDF字段,我就无法提取/解析PDF字段。 注意:-这个问题存在于Ado

  • 问题内容: 考虑这个JavaScript: 在Firefox的Firebug中,这显示了我的期望: 但是,在Safari和Chrome的控制台中,它显示: 换句话说,当打印转储时,对象在控制台中显示错误的属性,但是如果打印了特定的属性,则显示正确的值。 这是浏览器的怪癖吗?还是我所缺少的面向对象javascript的基本方面? 问题答案: 在Chrome浏览器(WebKit,也是Safari)中,

  • 我有一个包含名称列表的XML文件,其中一些使用默认PDF字体(Helvetica/Arial)中未表示的字符/字形: 我正在使用XSLT和Apache FOP处理这个文件,以生成一个列出名称的PDF文件。目前,我在控制台上收到以下警告,在PDF中,汉字被替换为##: 我查看了文档,似乎可以选择以下选项: 使用OpenType字体——但FOP不支持这种字体 我不想为每种语言使用不同的字体,因为会有中