2

在我的 servlet 中,在做了一些操作之后,我正在生成一个 PDF。它在字节数组中。

我可以通过这样做在浏览器中显示该 PDF,

  1. 采取byte[]_InputStream
  2. 将其写入ByteArrayOutputStream
  3. 然后ByteArrayOutputStream写入ServletOutputStream.
  4. 然后返回null;

这将在我当前的窗口中显示 PDF,但是是否可以在任何特定的 JSP 页面中显示 PDF?因为我想在显示 pdf 的同时在该 JSP 的页脚中放置一些按钮。以上述方式,整个窗口仅包含 PDF。

4

2 回答 2

1

您可以在您的 JSP 页面中嵌入一个IFRAME并设置其尺寸以占据整个页面,除了您要显示页脚的部分,并且页脚将成为您的 JSP 的一部分。IFRAME 目标/src 将是显示 PDF 的 servlet。

目前,您似乎正在使用一些请求参数从页面 A 调用 Servlet B。您应该使用相同的请求参数从页面 A 调用新的 JSP,JSP 页面将为 IFRAME 构建目标 URL 并调用 servlet B,后者将处理并返回 PDF 页面。

于 2012-10-09T11:19:00.500 回答
0

JSP 表单提交
动作="PDFServlet" 方法="发布"
SERVLET 代码
从 byte[] 读取到 ServletOutputStream

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        File file = new File("estatement.pdf");

        ServletOutputStream stream = null;
        BufferedInputStream buf = null;
        try {
            stream = response.getOutputStream();
            // set response headers
            response.setContentType("application/pdf");
            response.setDateHeader("Expires", 0);
            response.addHeader("Content-Disposition",
                    "inline; filename=estatement.pdf");
            response.setContentLength((int) file.length());
            buf = new BufferedInputStream(new FileInputStream(file));
            int readBytes = 0;
            while ((readBytes = buf.read()) != -1)
                stream.write(readBytes);
        } finally {
            if (stream != null)
                stream.flush();
            stream.close();
            if (buf != null)
                buf.close();
        }
    }
于 2018-09-04T05:51:48.210 回答