一. 安裝ant 1. 解壓apache-ant-1.9.4-bin到任意地方 2. 配置環境變數ANT_HOME為apache-ant-1.9.4-bin解壓後的目錄地址,如D:\Download\apache-ant-1.9.4 3. 在環境變數CLASSPATH中加入%ANT_HOME%\li ...
一. 安裝ant
1. 解壓apache-ant-1.9.4-bin到任意地方
2. 配置環境變數ANT_HOME為apache-ant-1.9.4-bin解壓後的目錄地址,如D:\Download\apache-ant-1.9.4
3. 在環境變數CLASSPATH中加入%ANT_HOME%\lib;
4. 在環境變數Path中加入%ANT_HOME%\bin;
5. 在cmd下測試ant是否安裝正確,命令:ant -version 安裝成功顯示ant的版本號,出錯,自己網上查
二. 安裝iReport,製作報表的工具
1. 直接雙擊iReport-5.6.0-windows-installer.exe進行安裝
三. jasperreports源碼與例子
1. 解壓jasperreports-5.6.0-project.zip
2. 在含有build.xml文件的目錄執行ant -p 命令可查看可執行哪些ant命令
3. /jasperreports-5.6.0/src下是源碼,可在/jasperreports-5.6.0/目錄下執行ant jar來編譯源代碼,
最後在/jasperreports-5.6.0/dist/下生成jasperreports-5.6.0.jar包
4. /jasperreports-5.6.0/demo/samples/下是實例
5. /jasperreports-5.6.0/demo/samples/webapp/下是標準的實例,可在其目錄下執行ant war命令生成war包,可在tomcat下直接部署運行
四. 製作一張報表
iReport設計報表應註意:在含有中文的地方,設置如下,防止pdf導出中文無法顯示:
Font name: 宋體 (中文字體)
PDF font name: STSong-Light
PDF Encoding: UniGB-UCS2-H(Chinese Siplified)
PDF Embeded: √
五. 報表在項目中的應用
1. 將製作好的報表(以jrxml結尾的文件)拷貝到\WebContent\reportFiles目錄下
2. 添加報表的數據源類,如:
數據源介面BaseJRDataSource.java
1 import java.util.Map; 2 3 import net.sf.jasperreports.engine.JRDataSource; 4 5 public interface BaseJRDataSource extends JRDataSource{ 6 public JRDataSource getInstance(Map parameters); 7 public Map<String,Object> getReportParams(Map parameters); 8 }View Code
具體報表的數據源類,如:
1 import java.util.ArrayList; 2 import java.util.List; 3 import java.util.Map; 4 5 import net.sf.jasperreports.engine.JRDataSource; 6 import net.sf.jasperreports.engine.JRException; 7 import net.sf.jasperreports.engine.JRField; 8 9 10 public class ×××DataSource implements BaseJRDataSource{ 11 12 private List data = new ArrayList(); 13 private int index = -1; 14 15 public ×××DataSource(){ 16 // 註入spring的bean類 17 } 18 19 /** 20 * 判斷報表是否有下一頁 21 * @return 22 */ 23 @Override 24 public boolean next() throws JRException{ 25 index++; 26 return (index < data.size()); 27 } 28 29 /** 30 * 根據報表欄位的名稱,格式化欄位的值 31 * @param field 報表欄位 32 * @return 33 */ 34 @Override 35 public Object getFieldValue(JRField field) throws JRException{ 36 Object value = null; 37 String fieldName = field.getName(); 38 if ("rownum".equals(fieldName)){ 39 value = index+1; 40 } 41 return value; 42 } 43 44 /** 45 * 返回數據源實例 46 * @param parameters 參數集 47 * @return 48 */ 49 @Override 50 public JRDataSource getInstance(Map parameters){ 51 // 根據參數,取得報表要展示的數據 52 data = ×××; 53 index = -1; 54 return this; 55 } 56 57 /** 58 * 返回整合後的查詢參數 59 * @param parameters 參數集 60 * @return 61 */ 62 @Override 63 public Map<String, Object> getReportParams(Map parameters) { 64 return parameters; 65 } 66 67 }View Code
3. 在spring的配置文件application.xml中添加數據源類的bean
4. 報表顯示頁面showReport.jsp,列印控制項採用jatoolsPrinter.cab,需要tomcat服務以進程的方式啟動
1 <%@ page contentType="text/html; charset=gb2312" language="java" %> 2 3 <%@ page errorPage="error.jsp" %> 4 <!-- spring服務定位器,可在任何地方取得bean --> 5 <%@ page import="com.×××.×××.ServiceLocator" %> 6 <%@ page import="com.×××.×××.datasource.BaseJRDataSource" %> 7 <%@ page import="net.sf.jasperreports.engine.*" %> 8 <%@ page import="net.sf.jasperreports.engine.util.*" %> 9 <%@ page import="net.sf.jasperreports.engine.export.*" %> 10 <%@ page import="net.sf.jasperreports.j2ee.servlets.*" %> 11 <%@ page import="java.util.*" %> 12 <%@ page import="java.io.*" %> 13 <%@ page import="net.sf.json.JSONObject" %> 14 <% 15 request.setCharacterEncoding("UTF-8"); 16 String report = request.getParameter("jasper"); 17 String dataSource = request.getParameter("ds"); 18 String args = request.getParameter("args"); 19 String fileName = request.getParameter("fileName"); 20 Map parameters = new HashMap(); 21 22 JSONObject jsonMap = JSONObject.fromObject(args); 23 Iterator<String> it = jsonMap.keys(); 24 while(it.hasNext()) { 25 String key = (String)it.next(); 26 parameters.put(key, jsonMap.get(key)); 27 } 28 29 String appmap = request.getContextPath(); 30 31 File reportFile = new File(application.getRealPath("/reportFiles/"+report+".jasper")); 32 if (!reportFile.exists()){ 33 JasperCompileManager.compileReportToFile(application.getRealPath("/reportFiles/"+report+".jrxml")); 34 reportFile = new File(application.getRealPath("/reportFiles/"+report+".jasper")); 35 } 36 37 JasperReport jasperReport = (JasperReport)JRLoader.loadObjectFromFile(reportFile.getPath()); 38 BaseJRDataSource baseJRDataSource= ((BaseJRDataSource)ServiceLocator.getService(dataSource)); 39 JRDataSource jRDataSource = baseJRDataSource.getInstance(parameters); 40 JasperPrint jasperPrint = 41 JasperFillManager.fillReport( 42 jasperReport, 43 baseJRDataSource.getReportParams(parameters), 44 jRDataSource 45 ); 46 47 session.setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint); 48 49 int pageIndex = 0; 50 int lastPageIndex = 0; 51 if (jasperPrint.getPages() != null){ 52 lastPageIndex = jasperPrint.getPages().size() - 1; 53 } 54 55 String pageStr = request.getParameter("page"); 56 try{ 57 pageIndex = Integer.parseInt(pageStr); 58 } 59 catch(Exception e){} 60 61 if (pageIndex < 0){ 62 pageIndex = 0; 63 } 64 65 if (pageIndex > lastPageIndex){ 66 pageIndex = lastPageIndex; 67 } 68 69 HtmlExporter exporter = new HtmlExporter(); 70 StringBuffer sbuffer = new StringBuffer(); 71 72 exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); 73 exporter.setParameter(JRExporterParameter.OUTPUT_STRING_BUFFER, sbuffer); 74 exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "../servlets/image?image="); 75 //exporter.setParameter(JRExporterParameter.PAGE_INDEX, Integer.valueOf(pageIndex)); 76 exporter.setParameter(JRHtmlExporterParameter.HTML_HEADER, ""); 77 exporter.setParameter(JRHtmlExporterParameter.BETWEEN_PAGES_HTML, ""); 78 exporter.setParameter(JRHtmlExporterParameter.HTML_FOOTER, ""); 79 80 exporter.exportReport(); 81 %> 82 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 83 <html> 84 <head> 85 <title></title> 86 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 87 <style type="text/css"> 88 a {text-decoration: none} 89 </style> 90 <OBJECT ID="jatoolsPrinter" CLASSID="CLSID:B43D3361-D075-4BE2-87FE-057188254255" codebase="jatoolsPrinter.cab#version=5,7,0,0"></OBJECT> 91 </head> 92 <body topmargin=0 leftmargin=0 rightmargin=0 bottomMargin=0> 93 <table id=titleTable width=100% cellspacing=0 cellpadding=0 border=0 ><tr> 94 <td height="25" width=100% valign="middle" style="font-size:13px" background="toolbar-bg.gif"> 95 <table width="100%"> 96 <tr > 97 <td width="100%" align="right" valign="middle" style="font-size:12px; line-height:12px; margin:3px 0 0 0 ;" > 98 <span style=" margin:0 10px 0 0 ; padding:5px 0 0 0 ; background: url(toolbar-line.gif) no-repeat right top;"> 99 <a href="#" onClick="doPrint('printPreview');return false;"><img src='print.gif' border=no ></a> 100 <a href="<%=appmap%>/servlets/xls?fileName=<%=fileName %>" target="_blank"><img src='excel.gif' border=no ></a> 101 <a href="<%=appmap%>/servlets/pdf" target="_blank"><img src='pdf.gif' border=no ></a> 102 <a href="<%=appmap%>/servlets/docx?fileName=<%=fileName %>" target="_blank"><img src='doc.gif' border=no ></a> 103 </span> 104 </td> 105 </tr> 106 </table> 107 </td> 108 </table> 109 <table width="100%" cellpadding="0" cellspacing="0" border="0"> 110 <td align="center"> 111 <%=sbuffer.toString()%> 112 </td> 113 <script type="text/javascript"> 114 function doPrint(how) 115 { 116 //列印文檔對象 117 var myDoc ={ 118 documents: document, // 列印頁面(div)們在本文檔中 119 copyrights : '傑創軟體擁有版權 www.jatools.com' // 版權聲明,必須 120 }; 121 122 // 調用列印方法 123 if(how == 'printPreview') 124 jatoolsPrinter.printPreview(myDoc); // 列印預覽 125 else if(how == 'printDialog') 126 jatoolsPrinter.print(myDoc ,true); // 列印前彈出列印設置對話框 127 else 128 jatoolsPrinter.print(myDoc ,false); // 不彈出對話框列印 129 } 130 </script> 131 132 </table> 133 </body> 134 </html>View Code
5. 報表顯示出錯頁面error.jsp
1 <%@ page isErrorPage="true" %> 2 <%@ page import="java.io.*" %> 3 4 <html> 5 <head> 6 <title> 7 JasperReports - Web Application Sample 8 </title> 9 <style type="text/css"> 10 .bnew 11 { 12 font-decoration:none; 13 font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; 14 font-size:10pt; 15 font-weight:bold; 16 color:#990000; 17 } 18 </style> 19 </head> 20 21 <body bgcolor="white"> 22 <span class="bnew">JasperReports encountered this error :</span> 23 <pre> 24 <% exception.printStackTrace(new PrintWriter(out)); %> 25 </pre> 26 </body> 27 </html>View Code
6. 若要支持pdf、img、excel、doc導出,需在web.xml中添加servlet,如下:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" 4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_4.xsd http://xmlns.jcp.org/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 5 version="2.4"> 6 7 <servlet> 8 <servlet-name>PdfServlet</servlet-name>