在servlet的特定jsp页面中显示pdf

时间:2012-10-09 11:15:29

标签: jsp pdf servlets pdf-generation

在我的servlet中,经过一些操作后,我生成了一个PDF。它在ByteArray。

我可以通过操作在浏览器中显示PDF,

  1. byte[]带到InputStream
  2. 将其写入ByteArrayOutputStream
  3. 然后将ByteArrayOutputStream写入ServletOutputStream
  4. 然后返回null;
  5. 这将在我当前窗口中显示PDF,但是是否可以在任何特定的JSP页面中显示PDF? 因为我想在显示pdf的同时在JSP的页脚中放置一些按钮。以上述方式,整个窗口仅包含PDF。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

JSP Form Submit
action="PDFServlet" method="post" 
SERVLET code
that reads from byte[] to 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();
        }
    }