技术开发 频道

在浏览器中显示JasperReports PDF文档


二、 改进的方法

    尽管前一个示例能够按要求进行工作,但是,我们还可以进一步改进之。不是创建一个字节数组并把它传递给ServletOutputStream类的write()方法,我们可以把PDF直接“流向”浏览器。为此,我们必须首先通过调用ServletContext中的getResourceAsStream()方法以流形式得到编译的资源。这个方法返回一个java.io.InputStream的实例—我们可以把它作为一个参数传递给JasperRunManager类的runReportToPdfStream()方法。下面示例展示了这一技术的使用:
package net.ensode.jasperreportsbrowserdemo; //……导入语句(省略) public class JasperReportsBrowserDemoServlet2 extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletOutputStream servletOutputStream = response.getOutputStream(); InputStream reportStream = getServletConfig().getServletContext() .getResourceAsStream("/reports/Simple_Report.jasper"); try { JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, new HashMap(),new JREmptyDataSource()); response.setContentType("application/pdf"); servletOutputStream.flush(); servletOutputStream.close(); } catch (JRException e) { //处理异常 } } }
    与前一个示例相比,这里的两处主要改动都以加粗显示。当生成PDF报告时,JasperRunManager的runReportToPdfStream()方法能够把PDF报告“流向”浏览器。通过这种方式,我们不必象前一个示例一样把一个字节数组存储在内存中。注意,当使用这种技术时,不能设置内容的长度;因此,客户端不能与服务器保持一种持续性连接,但是这通常对于PDF来说并不重要,因为整个PDF本身是自包含的,而客户端一般不要求更多的信息。

三、 小结
  从本文提供的示例程序可知,把一个JasperReports生成的PDF报告发送到一个浏览器并不是一件困难的事情。类似技术还可以用于导出HTML,RTF,XLS或任何其它由JasperReports所支持的输出格式。
0
相关文章