将 PDF 流消耗到 jsp

Consume PDF stream into jsp

我正在尝试在 jsp

中显示 PDF 报告
  1. 我可以使用以下代码获得 PDFstream

    private void generatePDFReport(OutputStream stream, JasperPrint jasperPrint) throws JRException {
    JRPdfExporter jrpdfexporter = new JRPdfExporter();
    jrpdfexporter.setExporterInput(new SimpleExporterInput(jasperPrint));
    jrpdfexporter.setExporterOutput(new SimpleOutputStreamExporterOutput(stream));
    SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration();
    jrpdfexporter.setConfiguration(configuration);
    jrpdfexporter.exportReport();
    

    }

现在我是输出流,它基本上是我想显示到 jsp 中的 PDF 流,我不想将整个响应内容类型设置为 application/pdf,但我想将 pdf 嵌入 jsp输出

所以我将 pdfstream 输出转换为 bytearray 并尝试使用以下方法显示

<script language="Javascript">
function loadDoc() {
    alert('called loadDoc');
    var xhr = new XMLHttpRequest();
    alert('called xhr');

    xhr.responseType = 'arraybuffer';
    alert('called responseType');

    alert('called xhr.onload ');

    // Create the Blob URL:
    var buffer = xhr.response;
    var blob = new Blob([<%=byteCharSet%>], {
        type: 'application/pdf'
    });
    var objectURL = URL.createObjectURL(blob);
    alert(objectURL);

    // Create an iframe to demonstrate it:
    var iframe = document.createElement('iframe');
    iframe.className = 'sample-iframe';
    iframe.src = objectURL;
    document.body.appendChild(iframe);
    console.log(objectURL);

    //xhr.open('GET', 'https://cors-anywhere.herokuapp.com/http://www.xmlpdf.com/manualfiles/hello-world.pdf', true);
    //xhr.send();
}
</script>

但是当我尝试执行时 javascript 无法理解 bytearray 输出它只是获取失败的 blob 值,如下所示在查看页面源代码中显示

     var blob = new Blob([%PDF-1.4
    %����
    3 0 obj
   <</Filter/FlateDecode/Length 625>>stream
   x���M��0@��>��um�'�v�������C
   ^���V������H����3�?�}� �    �q�D3�
   q�`�e��˼'��Do?1�(Ξ�h��2s�S(^�����gĈ^�/b��a�r"\"���_���Г�Lw

我用 Iframe 解决了这个问题。

在 src 的 iframe 中,我使用了另一个 jsp。

       out.write("<iframe src= displayPDF.jsp" + " " + "type=application/pdf width=100% height=600px ");
            out.write("</iframe>");

以下是displayPDF.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%><%
    byte[] pdfByteArray = (byte[]) session.getAttribute("PDFbyteArray");
    if (pdfByteArray == null)
        System.out.println("pdfByteArray is null");
    response.setHeader("Content-Disposition", "inline; filename=\"MyFile.pdf\"");
    response.setContentType("application/pdf; name=\"MyFile.pdf\"");
    ServletOutputStream serv_out = response.getOutputStream();
    serv_out.write(pdfByteArray);
    serv_out.flush();
    serv_out.close();
    out.clear();
    session.removeAttribute("PDFbyteArray");%>