直接在Web項目中使用.jasper文件,其實在軟件項目開發時,.jrxml文件經常修改,而且.jrxml還要在項目中進行保留備份,所以較為流行的做法是在項目中使用.jrxml來生成.jasper文件,並用PDF文件顯示出來.
設計的報表模板樣式,如圖1.28所示。
創建Web項目,將.jrxml復制到WebRoot中的jrxml文件夾中,項目結構如圖1.29所示。
在此項目中的src路徑下創建一個文件夾,其實也是一個名稱為jasperreports的包(package),創建它的主要作用就是 WebRoot中的.jrxml文件編譯成.jasper文件后要放入src/jasperreports包中,這樣做的主要原因就是一旦出現主報表 main.jasper引用子報表sub.jasper的時候,不需要指定子報表的路徑,只需要一個相對路徑即可,因為主報表和子報表都在 classpath路徑中,屬於相對路徑,這樣設計可以有效地解決Parameters過多的問題,此方法也是本教程着力推薦的實現方式,關於子報表的使 用請參看后面的章節。
加入jasperreports包的項目結構如圖1.30所示。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { String path = this.getClass().getResource("/jasper/report1.jrxml").getPath(); File file = new File(path); String parentPath = file.getParent(); String jrxmlDestSourcePath = parentPath+"/report1.jasper"; JasperCompileManager.compileReportToFile(path, jrxmlDestSourcePath); InputStream isRef = new FileInputStream(new File(jrxmlDestSourcePath)); ServletOutputStream sosRef = response.getOutputStream(); response.setContentType("application/pdf"); JasperRunManager.runReportToPdfStream(isRef,sosRef,new HashMap(), new JREmptyDataSource()); sosRef.flush(); sosRef.close(); } catch (JRException e) { // TODO Auto-generated catch block e.printStackTrace(); }
程序運行后的效果如圖1.31所示。
編譯成功后,在Tomcat軟件中的指定路徑下生成了.jasper文件,如圖1.32所示。