【问题标题】:How to get raw bytes from servlet response as PDF, and show it within another JSP page?如何从 servlet 响应中获取原始字节为 PDF,并在另一个 JSP 页面中显示它?
【发布时间】:2013-08-09 14:14:20
【问题描述】:

我正在使用 jQuery 将我的表单提交到一个 servlet,其中使用 iText 生成 PDF 流。

private void service(HttpServletRequest request, HttpServletResponse response)
{
    String oid = "something";
    BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
    Font font = new Font(bf, 12, Font.BOLD, BaseColor.BLUE);
    Document document = new Document(PageSize.A4, 20, 20, 20, 20);
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    PdfWriter pdfWriter = PdfWriter.getInstance(document, baos);
    document.open();

    Paragraph paragraph = new Paragraph(oid, font);
    paragraph.setAlignment(Paragraph.ALIGN_CENTER);
    document.add(paragraph);
    document.close();
    pdfWriter.close();

    response.setContentType("application/pdf");
    response.setHeader("Content-Disposition", "inline;filename=" + oid + ".pdf");
    response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate"); 
    response.setHeader("Pragma", "No-cache");

    response.setContentLength(baos.size());
    ServletOutputStream sos = response.getOutputStream();
    baos.writeTo(sos);
    sos.flush();
}

我的问题是,在我的 FORM.submit 函数中,如何将“responseData”转换为 PDF 并在新选项卡/窗口而不是当前 JSP 页面中打开它?

$("#myform").submit(function() {
    $.ajax ({
        url: "MyServlet",
        type: "POST",
        data: values
    }) .done (function(responseData) {
    // alert(responseData);  // alert response from servlet, it's raw data of that PDF
    // HOW TO 'convert' RESPONSE TO PDF AND OPEN IT IN A NEW TAB/WINDOW ??
    });
    return false;
});

任何建议将不胜感激。谢谢!

【问题讨论】:

    标签: jsp servlets itext response


    【解决方案1】:

    你不能在你的 ajax 函数调用的 done 函数中做你要求的事情。

    浏览器中的Javascript无法提示或强制下载文件。尽管responseData 可能包含 PDF 的原始字节,但无法在此处显示。你应该做的是有一个你可以点击的 URL,它将Content-Type 设置为任何 PDF,并将字节直接流式传输到响应。在 javascript 中,您可以通过点击之前的 URL 将其指向打开新选项卡/窗口。

    你可以设置浏览器的位置

    window.href.location = newLocation;
    

    看看here 的技巧。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-14
      • 2012-03-15
      • 1970-01-01
      • 2016-05-17
      相关资源
      最近更新 更多