【问题标题】:Problems displaying a PDF from a Servlet从 Servlet 显示 PDF 的问题
【发布时间】:2018-08-20 09:55:16
【问题描述】:

我试图在我的 HTML 页面上显示 PDF,但它显示出来了。 我的 servlet 代码:

try {
    String text = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
    Document document = new Document();
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    PdfWriter.getInstance(document, baos);
    document.open();
    document.add(new Paragraph(text));
    document.close();

    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.setContentLength(baos.size());
    OutputStream os = response.getOutputStream();
    baos.writeTo(os);
    os.flush();
    os.close();
}
catch(DocumentException e) {
    throw new IOException(e.getMessage());
}

HTML 代码:

<object id="mypdfobject" type="application/pdf" style="background-color: orange;color: black">
</object>

JavaScript 代码:

$.post("../paymailcontroller?uid="+uId,function(pdata){     
         var objectPDF = document.getElementById("mypdfobject");
         objectPDF.data=pdata;
    });

我使用的浏览器是谷歌浏览器。如果我调用该页面,则没有 PDF,我不知道在哪里寻找。

如何在任何浏览器中显示创建的 pdf?

当前的输出是这样的,基本上就是原始的PDF:

%PDF-1.4 %���� 2 0 obj stream x�+�r �26S�00SI�2P�5�1���BҸ4>>>/Parent 3 0 R/MediaBox[0 0 595 842] >> ENDOBJ 1 0 OBJ ENDOBJ 3 0 OBJ ENDOBJ 5 0 OBJ ENDOBJ 6 0 OBJ ENDOBJ XREF 0 7 0000000000000000000000000000000000000N 000000013000000 n 0000000529 00000 n 拖车 > startxref 659 %%EOF

【问题讨论】:

    标签: javascript java pdf servlets


    【解决方案1】:

    您必须设置内容处置。有两种可能:

    (1) 在浏览器中显示 PDF

    response.setHeader("Content-Disposition", "inline; filename=\"" + filename + "\";");
    

    (2)打开下载文件下载

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

    更新: 我认为您的 JScript 不正确。例如。这样做:

    $("#" + this.divId).append('<object id="' + this.pdfObjectId + '" data="' + yourserver + path + file+'" type="application/pdf" width="768" height="1024"></object>');
    

    对于其余参数,我们设置以下选项:

    response.setStatus(HttpServletResponse.SC_OK);
    response.setHeader("pragma", "no-cache");
    response.setContentType("application/pdf");
    

    【讨论】:

    • 正如你所说,我已经尝试了两种方式@Lonzak。不幸的是,没有显示相同结果的差异。我在前端有什么错误吗??
    • 是的,我敢打赌你的 JS 不对。您是否首先尝试不使用 JavaScript?尝试在新浏览器中打开新网址:window.open("http://.../yourPDF?name=name&...");
    • 实际上,我在该页面上有一个 JSP 页面,我想显示 pdf,但由于该编码结果,我已将控制权转移到与 window.open 相同的新 HTML 页面,并且在此页面中只有我已经使用了 $.get();从 servlet 获取生成的 PDF 的方法,但在 HTML 页面中,同样的结果也显示了我在问题部分提交的输出。
    • 在你的 jscript 中你没有设置 mimetype。尝试修改我给你的 jscript 示例。如果您看到原始 PDF,这通常表明内容类型或内容配置未正确设置
    • 你能告诉我我应该在这里输入什么来代替(你的服务器+路径+文件)吗??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    • 2013-12-16
    • 1970-01-01
    • 1970-01-01
    • 2019-12-30
    • 1970-01-01
    相关资源
    最近更新 更多