2

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

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

%PDF-1.4 %���� 2 0 obj <>stream x���1B1C��#@�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]/Rotate 90>> endobj 1 0 obj <> endobj 3 0 obj <> endobj 5 0 obj <> endobj 6 0 obj <> endobj XREF 0 7 00000000 65535 F 0000000379 00000 N 0000000015 00000 N 0000000467 00000 N 0000000211 00000 N 0000000530 00000 N 00000000057500000 N n 0000000575 n trailer N Trailer

这是 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 文件。

4

3 回答 3

2

根据http://itextpdf.com/examples/iia.php?id=173您忘记设置内容长度,请尝试添加response.setContentLength(baos.size());之前ServletOutputStream out = response.getOutputStream();

于 2013-05-14T21:42:35.320 回答
1

尝试添加

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() 后;

于 2017-01-24T06:59:18.393 回答
-1

I have answer for this ,I sucessed by opening .PDF file in new tab,From developemnt perspective ON CLICK either button or link target should be balnk e.g(target=_blank)

于 2014-10-21T11:25:17.393 回答