kl800.com省心范文网

JasperReport报表设计总结


为了开发报表,已经拜读了一大堆的资料,其中大部分是重复的。可以看得出, 国人还是比较热衷于 copy&paste 的工作。所以找了一大堆的资料都是相同的, 或者可以用一个词来形容,换汤不换药的。 有必要对于 jasper Report 的学习进度进行一下总结,一来可以更新一下以前的 资料中的一些旧得不能再旧的不再适用的东西,二来让后来者可以轻松的上手。 首先,jasperReport 是一个以 java 实现的报表工具,(好像是句废话)。可以 实现多种格式的报表。 再我们先理解一下 jasperReport 的实现过程。笔者不再画图,网上到处都是。 1)定制报表格式。 有二种方式,一种就是写 jrxml 文件,其实就是 xml 文件,只不过是后缀名不 一样罢了。另一种方式更直接,就是生成一个 JasperDesign 类的实例,在 japsperDesign 中自己定义模板。 jrxml 文件也是通过一个 JRXmlLoad 加载过来, 转成 JasperDesign 类的实例。也就是说写 jrxml 文件还需要进行解析,加载。 现实中我们使用的报表一般格式比较固定, 因而可以通过先使用 iReport 工具生 成模板,再加载解析的方式。这种方式简单,而且可见性强。 2)填充数据。 在最新版(2007.4.30 发布)的 jasperReports1.3.3 中,支持了很多的格式, 包括了对于 Hibernate 的支持。填充数据对于我们经常使用的来说,一般是二种 方式,一种方式是通过 JDBC 连接提供数据源,一种就是通过 javaBean 的集合提 供数据源。当然还有 web Service 的 xml 文件提供的。我的建议是,如果你的程 序中的统计直接使用 Jdbc 就可以完成,那么就使用 jdbc 数据源的方法,反之, 使用 javaBean 的集合是不错的选择,因为这样不会在意你的数据的来源,你也 可以任意处理,比如说,要通过权限检查的数据才在报表中生成的话,就可以过 滤到不符合权限的数据。 3)显示或打印。 显示,即将 JasperReport 生成的文件直接显示出来,打印所使用的方式其实 就是生成文件,然后调用打印来对文件进行打印。 看起来是不是很简单,对,确实很简单。 笔者主要从事基于 B/S 模式的开发, 相信大部分人的使用也是基于 web 进行使用。 故笔者对于基于 web 的开发进行详细讲述。 1、工程环境配置。 将以下包加入 WEB-INF/lib 中。 commons-beanutils-1.7.jar;commons-collections-2.1.jar;commons-digeste r-1.7.jar;commons-logging-1.0.2.jar;commons-logging-api-1.0.2.jar;ite xt-1.3.1.jar;jasperreports-1.3.3.jar;jdt-compiler-3.1.1.jar;jxl-2.6.j ar;png-encoder-1.5.jar;poi-2.0-final-20040126.jar 以上包是 jasperReport 必须。 2、iReport 的安装 这个很简单,直接下一步就可以了。 3、使用 iReport 生成 .jasper 文件 .jasper 是经过编译的 japserReport 模板,即.jrxml 编译后的。 对于 iReport 的使用网络上已经有了详细的中文的文档,具体可以下载附件查 看。使用.jasper 文件可以避免在系统中再进行编译,增加系统的压力。

4、数据填充 数据填充是相对于比较重要的一步,数据填充的目的是为了将数据填充进去,生 成一个 JapserPrint 对象。笔者在之前已经阐述过,现在主要是基于关系型数据 库(比较简单的,没有权限控制的),以及基于 JavaBean Collection 进行数据 填充。进行数据填充的基本就是一定要实现 JRDataSource,JRDataSource 定义 了二个方法,一个是指针移动的方法 next(),另一个是取值的 getFieldValue ()方法,用来取值填充。 对于关系型数据库, 即直接利用数据库的表来生成报表的, 只需要传入一个 Java Connection 即可。 JasperReport 已经有了个默认的实现的 JRDataSource 的接口 了。对于 Java Conncetion 的获得,笔者建议使用工厂方法或者使用 Spring 方 式来获得。可以参照笔者写的如下: java 代码

1. /** 2. * @copyRight Beijing Tsing-Tech Reachway Software Co.,Ltd. 3. * @author Jimmy.Shine 2007-5-11 4. */ 5. package cn.com.reachway.framework.report; 6. 7. import java.sql.Connection; 8. import java.sql.DriverManager; 9. 10.import cn.com.reachway.framework.exception.JasperReportExceptio n; 11. 12./** 13. * Used for get a JDBC connection for Jasper Report 14. */ 15.public class JDBCConnection { 16. /** 17. * Which Jdbc driver were used. Like: "net.sourceforge.jtds.jd bc.Driver" 18. */ 19. private String jdbcDriver; 20. /** 21. * The jdbc url,define which database server,which db. Like: 22. * "jdbc:jtds:sqlserver://192.168.1.50:1433;DatabaseName=JAVA5 ;SelectMethod=Cursor" 23. */ 24. private String jdbcUrl; 25. 26. private String dbUser;

27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69.

private String dbPassword; public String getDbPassword() { return dbPassword; } public void setDbPassword(String dbPassword) { this.dbPassword = dbPassword; } public String getDbUser() { return dbUser; } public void setDbUser(String dbUser) { this.dbUser = dbUser; } public String getJdbcDriver() { return jdbcDriver; } public void setJdbcDriver(String jdbcDriver) { this.jdbcDriver = jdbcDriver; } public String getJdbcUrl() { return jdbcUrl; } public void setJdbcUrl(String jdbcUrl) { this.jdbcUrl = jdbcUrl; } public JDBCConnection() { super(); } /** * Get the Connection * @return connection * @throws JasperReportException */

70. public Connection getConnection() throws JasperReportException { 71. Connection con; 72. try { 73. check(); 74. Class.forName(this.jdbcDriver); 75. con = DriverManager.getConnection(this.jdbcUrl, this.dbUser, this.dbPassword); 76. return con; 77. } catch (Exception e) { 78. e.printStackTrace(); 79. throw new JasperReportException("Get JDBC Connection Error") ; 80. } 81. } 82. 83. /** 84. * Check the Configure 85. * @throws JasperReportException 86. */ 87. private void check() throws JasperReportException { 88. if (this.jdbcDriver == null || this.jdbcDriver.equals("") || this.jdbcUrl == null || this.jdbcUrl.equals("") 89. || this.dbUser == null || this.dbUser.equals("") || this.db Password == null) { 90. throw new JasperReportException("Jdbc Configure error!"); 91. } 92. } 93. 94.} 95.

java 代码

1. 2. 3. 4. 5. 6. 7. 8.

/** * @copyRight Beijing Tsing-Tech Reachway Software Co.,Ltd. * @author Jimmy.Shine 2007-5-14 */ package cn.com.reachway.framework.report.dataSource; import net.sf.jasperreports.engine.JRDataSource; import net.sf.jasperreports.engine.JRException;

9. import net.sf.jasperreports.engine.JRField; 10. 11./** 12. * 报表的 dataSource 的基类,所有利用 DataSource 产生报表的继承此 类 13. */ 14.public abstract class ReportDataSource implements JRDataSource { 15. 16. /** 17. * 取值 18. */ 19. public abstract Object getFieldValue(JRField jrField) throws J RException; 20. 21. /** 22. * 指针移动 23. */ 24. public abstract boolean next() throws JRException; 25. 26.} 27. 这样可以共用配置文件中的 jdbc 连接的相关参数。 对于其它的数据源,JavaBean Collection,笔者采用了一个抽象类,使用抽象 类的目的,是为了使开发者尽可能不用直接接触 jasperReport(此为笔者自己 的方式,笔者是 PM,为了考虑底下的人的开发)。以下为抽象类以及笔者提供 的一个 sample:

1. /** 2. * @copyRight Beijing Tsing-Tech Reachway Software Co.,Ltd. 3. * @author Jimmy.Shine 2007-5-14 4. */ 5. package cn.com.reachway.framework.report.dataSource; 6. 7. import java.util.ArrayList; 8. import java.util.List; 9. 10.import net.sf.jasperreports.engine.JRException; 11.import net.sf.jasperreports.engine.JRField; 12. 13./** 14. * 利用 JavaBean Collection 生成 ReportDataSource 的例子

15. */ 16.public class ReportDataSourceSample extends ReportDataSource { 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57.

private List docs = new ArrayList(); private int index = -1; public ReportDataSourceSample() { for (int i = 0; i < 10; i++) { Document doc = new Document("ViewTimes is:" + i, i); this.docs.add(doc); } } // 内部类,作为 demo 时使用 private class Document { private String name; private int viewTimes; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getViewTimes() { return viewTimes; } public void setViewTimes(int viewTimes) { this.viewTimes = viewTimes; } public Document() { } public Document(String name, int viewTimes) { this.name = name; this.viewTimes = viewTimes; }

58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69.

} public List getDocs() { return docs; } public void setDocs(List docs) { this.docs = docs; } @Override public Object getFieldValue(JRField jrField) throws JRExceptio n {

70. 71. String fieldName = jrField.getName(); 72. Document doc = this.docs.get(index); 73. if ("name".equals(fieldName)) { 74. return doc.getName(); 75. } 76. if ("viewTimes".equals(fieldName)) { 77. return doc.getViewTimes(); 78. } 79. return null; 80. } 81. 82. @Override 83. public boolean next() throws JRException { 84. index++; 85. return (index < this.docs.size()); 86. } 87.} 88. java 代码 以上的例子应当很清楚的写明了如何生成数据源。 对于数据源的填充,笔者使用了二个类,分别用来对应使用 Connction 及 JavaBean Collection 进行填充。 java 代码

1. /** 2. * @copyRight Beijing Tsing-Tech Reachway Software Co.,Ltd. 3. * @author Jimmy.Shine 2007-5-12

4. */ 5. package cn.com.reachway.framework.report.jasperPrint; 6. 7. import java.io.File; 8. import java.sql.Connection; 9. import java.util.Map; 10. 11.import net.sf.jasperreports.engine.JRException; 12.import net.sf.jasperreports.engine.JasperFillManager; 13.import net.sf.jasperreports.engine.JasperPrint; 14.import net.sf.jasperreports.engine.JasperReport; 15.import net.sf.jasperreports.engine.util.JRLoader; 16.import cn.com.reachway.framework.exception.JasperReportExceptio n; 17. 18./** 19. * 使用报表模板及数据等来生成 JapserPrint 20. */ 21.public class JasperPrintWithConnection { 22. /** 传入的参数 */ 23. private Map params; 24. /** 模板文件的地址 */ 25. private String reportFilePath; 26. /** JDBC connection */ 27. private Connection con; 28. 29. public Connection getCon() { 30. return con; 31. } 32. 33. public void setCon(Connection con) { 34. this.con = con; 35. } 36. 37. public Map getParams() { 38. return params; 39. } 40. 41. public void setParams(Map params) { 42. this.params = params; 43. } 44. 45. public String getReportFilePath() { 46. return reportFilePath;

47. } 48. 49. public void setReportFilePath(String reportFilePath) throws Ja sperReportException { 50. if (reportFilePath == null || !reportFilePath.endsWith(".jasp er")) 51. throw new JasperReportException("您传入的模板文件格式不对, 请 传入以.jasper 为后缀的文件!"); 52. this.reportFilePath = reportFilePath; 53. } 54. 55. public JasperPrintWithConnection() { 56. super(); 57. } 58. 59. public JasperPrintWithConnection(String reportFilePath, Map pa rams, Connection con) throws JasperReportException { 60. if (reportFilePath == null || !reportFilePath.endsWith(".jasp er")) 61. throw new JasperReportException("模板文件格式不对,请传入 以.jasper 为后缀的文件!"); 62. if (con == null) 63. throw new JasperReportException("Conncetion 不应当为 null!"); 64. this.setReportFilePath(reportFilePath); 65. this.setParams(params); 66. this.setCon(con); 67. } 68. 69. /** 70. * 取得 JasperPrint 71. * @return 72. * @throws JasperReportException 73. */ 74. public JasperPrint getJasperPrint() throws JasperReportExcepti on { 75. File reportFile = new File(this.reportFilePath); 76. if (!reportFile.exists()) 77. throw new JasperReportException("传入的模板文件不存在!"); 78. 79. try { 80. // Load 编译好的模板 81. JasperReport jasperReport = (JasperReport) JRLoader.loadObje ct(reportFile.getPath());

// 进行数据填充 JasperPrint jasperPrint = JasperFillManager.fillReport(jaspe rReport, this.params, this.con); 84. return jasperPrint; 85. 86. } catch (JRException jre) { 87. jre.printStackTrace(); 88. throw new JasperReportException("在进行数据填充时发生了错误 中,请检查是否是数据库连接错误或者是用来填充的参数 map 有 误!"); 89. } 90. 91. } 92.} 93.

82. 83.

1. /** 2. * @copyRight Beijing Tsing-Tech Reachway Software Co.,Ltd. 3. * @author Jimmy.Shine 2007-5-14 4. */ 5. package cn.com.reachway.framework.report.jasperPrint; 6. 7. import java.io.File; 8. import java.util.Map; 9. 10.import net.sf.jasperreports.engine.JRDataSource; 11.import net.sf.jasperreports.engine.JRException; 12.import net.sf.jasperreports.engine.JasperFillManager; 13.import net.sf.jasperreports.engine.JasperPrint; 14.import net.sf.jasperreports.engine.JasperReport; 15.import net.sf.jasperreports.engine.util.JRLoader; 16.import cn.com.reachway.framework.exception.JasperReportExceptio n; 17. 18./** 19. * 20. */ 21.public class JasperPrintWithDataSource { 22. /** 传入的参数 */ 23. private Map params; 24. /** 模板文件的地址 */ 25. private String reportFilePath;

26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49.

/** dataSrouce */ private JRDataSource dataSource; public JRDataSource getDataSource() { return dataSource; } public void setDataSource(JRDataSource dataSource) { this.dataSource = dataSource; } public Map getParams() { return params; } public void setParams(Map params) { this.params = params; } public String getReportFilePath() { return reportFilePath; }

public void setReportFilePath(String reportFilePath) throws Ja sperReportException { 50. if (reportFilePath == null || !reportFilePath.endsWith(".jasp er")) 51. throw new JasperReportException("您传入的模板文件格式不对, 请 传入以.jasper 为后缀的文件!"); 52. this.reportFilePath = reportFilePath; 53. } 54. 55. public JasperPrintWithDataSource() { 56. super(); 57. } 58. 59. public JasperPrintWithDataSource(String reportFilePath, Map pa rams, JRDataSource dataSource) 60. throws JasperReportException { 61. if (reportFilePath == null || !reportFilePath.endsWith(".jasp er")) 62. throw new JasperReportException("模板文件格式不对,请传入 以.jasper 为后缀的文件!"); 63. if (dataSource == null)

throw new JasperReportException("DataSource 不应当为 null!"); 65. this.setReportFilePath(reportFilePath); 66. this.setParams(params); 67. this.setDataSource(dataSource); 68. } 69. /** 70. * 取得 JasperPrint 71. * @return 72. * @throws JasperReportException 73. */ 74. public JasperPrint getJasperPrint() throws JasperReportExcepti on { 75. File reportFile = new File(this.reportFilePath); 76. if (!reportFile.exists()) 77. throw new JasperReportException("传入的模板文件不存在!"); 78. 79. try { 80. // Load 编译好的模板 81. JasperReport jasperReport = (JasperReport) JRLoader.loadObje ct(reportFile.getPath()); 82. // 进行数据填充 83. JasperPrint jasperPrint = JasperFillManager.fillReport(jaspe rReport, this.params, this.dataSource); 84. return jasperPrint; 85. 86. } catch (JRException jre) { 87. jre.printStackTrace(); 88. throw new JasperReportException("在进行数据填充时发生了错误 中,请检查是否是数据库连接错误或者是用来填充的参数 map 有 误!"); 89. } 90. 91. } 92.} 93. java 代码 其中使用的 JasperReportException 为笔者定义的异常,用来统一处理报表异 常。 5、报表产生 报表产生是程序中最终可见的一部分,在 jasperReport 的 demo 中,大部分中使 用了 jasperReport 的 net.sf.jasperreports.j2ee.servlets.*中的类来生成。

64.

其实这也算是开源的产品的一个问题, 其实 jasperReport 提供的 report 的工具, 只能算是 demo 级别的,不能算是产品级别的。相信很多的朋友在使用的时候就 碰上无法生成的问题。笔者在此基础上封装了一下。

java 代码

1. /** 2. * @copyRight Beijing Tsing-Tech Reachway Software Co.,Ltd. 3. * @author Jimmy.Shine 2007-5-12 4. */ 5. package cn.com.reachway.framework.report.export; 6. 7. import java.io.IOException; 8. import java.io.PrintWriter; 9. import java.sql.Connection; 10.import java.util.Map; 11. 12.import javax.servlet.http.HttpServletRequest; 13.import javax.servlet.http.HttpServletResponse; 14. 15.import net.sf.jasperreports.engine.JRDataSource; 16.import net.sf.jasperreports.engine.JRExporterParameter; 17.import net.sf.jasperreports.engine.JasperPrint; 18.import net.sf.jasperreports.engine.export.JRHtmlExporter; 19.import net.sf.jasperreports.engine.export.JRHtmlExporterParamet er; 20.import net.sf.jasperreports.j2ee.servlets.ImageServlet; 21.import cn.com.reachway.framework.exception.JasperReportExceptio n; 22.import cn.com.reachway.framework.report.jasperPrint.JasperPrint WithConnection; 23.import cn.com.reachway.framework.report.jasperPrint.JasperPrint WithDataSource; 24. 25./** 26. * 利用报表生成 HTML 格式报表 27. */ 28.public class HTMLExport { 29. 30. /** 31. * 导出报表

32. 33. 34. 35. 36. 37. 38. 39. 40.

* * @param request * @param response * @param reportFilePath * @param params * @param con * @throws JasperReportException */ public void export(HttpServletRequest request, HttpServletR esponse response, String reportFilePath, Map params, 41. Connection con) throws JasperReportException { 42. try { 43. PrintWriter out = response.getWriter(); 44. try { 45. response.setContentType("text/html;charset=UTF8"); 46. JasperPrint jasperPrint = new JasperPrintWithCo nnection(reportFilePath, params, con).getJasperPrint(); 47. // 使用 JRHtmlExproter 导出 Html 格式 48. JRHtmlExporter exporter = new JRHtmlExporter(); 49. request.getSession().setAttribute(ImageServlet. DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint); 50. exporter.setParameter(JRExporterParameter.JASPE R_PRINT, jasperPrint); 51. exporter.setParameter(JRExporterParameter.OUTPU T_WRITER, out); 52. exporter.setParameter(JRHtmlExporterParameter.I MAGES_URI, "./servlets/image?image="); 53. exporter.setParameter(JRExporterParameter.CHARA CTER_ENCODING, "UTF-8"); 54. // 导出 55. exporter.exportReport(); 56. } catch (Exception e) { 57. e.printStackTrace(); 58. throw new JasperReportException("在导出 Html 格 式报表时发生错误!"); 59. } finally { 60. if (out != null) { 61. try { 62. out.close(); 63. } catch (Exception e) { 64. } 65. }

} } catch (IOException ioe) { ioe.printStackTrace(); throw new JasperReportException("从 Response 中取得 PrintWriter 时发生错误!"); 70. } 71. } 72. 73. /** 74. * 导出报表 75. * 76. * @param request 77. * @param response 78. * @param reportFilePath 79. * @param params 80. * @param dataSource 81. * @throws JasperReportException 82. */ 83. public void export(HttpServletRequest request, HttpServletR esponse response, String reportFilePath, Map params, 84. JRDataSource dataSource) throws JasperReportExcepti on { 85. try { 86. PrintWriter out = response.getWriter(); 87. try { 88. response.setContentType("text/html;charset=UTF8"); 89. JasperPrint jasperPrint = new JasperPrintWithDa taSource(reportFilePath, params, dataSource) 90. .getJasperPrint(); 91. // 使用 JRHtmlExproter 导出 Html 格式 92. JRHtmlExporter exporter = new JRHtmlExporter(); 93. request.getSession().setAttribute(ImageServlet. DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint); 94. exporter.setParameter(JRExporterParameter.JASPE R_PRINT, jasperPrint); 95. exporter.setParameter(JRExporterParameter.OUTPU T_WRITER, out); 96. exporter.setParameter(JRHtmlExporterParameter.I MAGES_URI, "./servlets/image?image="); 97. exporter.setParameter(JRExporterParameter.CHARA CTER_ENCODING, "UTF-8"); 98. // 导出

66. 67. 68. 69.

99. exporter.exportReport(); 100. } catch (Exception e) { 101. e.printStackTrace(); throw new JasperReportException("在导出 102. Html 格式报表时发生错误!"); 103. } finally { 104. if (out != null) { 105. try { out.close(); 106. 107. } catch (Exception e) { 108. } 109. } 110. } } catch (IOException ioe) { 111. 112. ioe.printStackTrace(); 113. throw new JasperReportException("从 Response 中 取得 PrintWriter 时发生错误!"); 114. } 115. } 116. 117. } Excel 格式的: java 代码

1. /** 2. * @copyRight Beijing Tsing-Tech Reachway Software Co.,Ltd. 3. * @author Jimmy.Shine 2007-5-13 4. */ 5. package cn.com.reachway.framework.report.export; 6. 7. import java.io.IOException; 8. import java.io.OutputStream; 9. import java.net.URLEncoder; 10.import java.sql.Connection; 11.import java.util.List; 12.import java.util.Map; 13. 14.import javax.servlet.http.HttpServletRequest; 15.import javax.servlet.http.HttpServletResponse; 16. 17.import net.sf.jasperreports.engine.JRDataSource; 18.import net.sf.jasperreports.engine.JRException;

19.import net.sf.jasperreports.engine.JRExporterParameter; 20.import net.sf.jasperreports.engine.JasperPrint; 21.import net.sf.jasperreports.engine.export.JRXlsAbstractExporter ; 22.import net.sf.jasperreports.engine.export.JRXlsAbstractExporter Parameter; 23.import net.sf.jasperreports.j2ee.servlets.BaseHttpServlet; 24.import cn.com.reachway.framework.exception.JasperReportExceptio n; 25.import cn.com.reachway.framework.report.jasperPrint.JasperPrint WithConnection; 26.import cn.com.reachway.framework.report.jasperPrint.JasperPrint WithDataSource; 27. 28./** 29. * 利用报表生成 Xls 的基类 30. */ 31.public abstract class BaseExcelExport { 32. /** 33. * 导出报表 34. * 35. * @param request 36. * @param response 37. * @param reportFilePath 38. * @param params 39. * @param con 40. * @param fileName 41. * @throws JasperReportException 42. */ 43. public void export(HttpServletRequest request, HttpServletR esponse response, String reportFilePath, Map params, 44. Connection con, String fileName) throws JasperRepor tException { 45. JasperPrint jasperPrint = new JasperPrintWithConnection (reportFilePath, params, con).getJasperPrint(); 46. // 将填充完的 japserPrint 放入 session 中。 47. request.getSession().setAttribute(BaseHttpServlet.DEFAU LT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint); 48. // 拿到 japserPrintList 49. List jasperPrintList = BaseHttpServlet.getJasperPrintLi st(request); 50. // 若没有 JasperPrintList,则抛出异常 51. if (jasperPrintList == null) {

52.

throw new JasperReportException("在 Http Session 中 没有找到 JasperPrint List"); 53. } 54. try { 55. OutputStream ouputStream = response.getOutputStream (); 56. try { 57. 58. response.setContentType("application/xls"); 59. response.setCharacterEncoding("UTF-8"); 60. if (fileName == null || fileName.equals("")) 61. response.setHeader("Content-Disposition", " inline; filename=\"noTitle.xls\""); 62. else { 63. response.setHeader("Content-Disposition", " inline; filename=\"" 64. + URLEncoder.encode(fileName, "UTF8") + ".xls\""); 65. 66. } 67. // Xls 格式的导出器 JRXlsAbstractExport 68. JRXlsAbstractExporter exporter = getXlsExporter (); 69. 70. // 在导出器中放入要导出的 japserPrintList 71. exporter.setParameter(JRExporterParameter.JASPE R_PRINT_LIST, jasperPrintList); 72. 73. exporter.setParameter(JRExporterParameter.OUTPU T_STREAM, ouputStream); 74. // 设置 Xls 的属性 75. exporter.setParameter(JRXlsAbstractExporterPara meter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE); 76. exporter.setParameter(JRXlsAbstractExporterPara meter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE); 77. // 导出 78. exporter.exportReport(); 79. } catch (JRException e) { 80. e.printStackTrace(); 81. throw new JasperReportException("在生成 XLS 报表 时发生错误!"); 82. } 83. 84. finally {

} } catch (IOException ioe) { ioe.printStackTrace(); throw new JasperReportException("从 Response 中取得 OutputStream 时发生错误!"); 95. } 96. 97. } 98. 99. /** 100. * 导出报表 * 101. 102. * @param request * @param response 103. 104. * @param reportFilePath 105. * @param params * @param dataSource 106. 107. * @param fileName * @throws JasperReportException 108. 109. */ 110. public void export(HttpServletRequest request, HttpSer vletResponse response, String reportFilePath, Map params, 111. JRDataSource dataSource, String fileName) thro ws JasperReportException { 112. JasperPrint jasperPrint = new JasperPrintWithDataS ource(reportFilePath, params, dataSource).getJasperPrint(); 113. // 将填充完的 japserPrint 放入 session 中。 114. request.getSession().setAttribute(BaseHttpServlet. DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint); 115. // 拿到 japserPrintList 116. List jasperPrintList = BaseHttpServlet.getJasperPr intList(request); 117. // 若没有 JasperPrintList,则抛出异常 118. if (jasperPrintList == null) { 119. throw new JasperReportException("在 Http Session 中没有找到 JasperPrint List"); 120. } try { 121.

85. 86. 87. 88. 89. 90. 91. 92. 93. 94.

if (ouputStream != null) { try { ouputStream.close(); } catch (IOException ex) { } }

122. OutputStream ouputStream = response.getOutputS tream(); 123. try { 124. 125. response.setContentType("application/xls") ; 126. response.setCharacterEncoding("UTF-8"); 127. if (fileName == null || fileName.equals("" )) response.setHeader("Content-Dispositio 128. n", "inline; filename=\"noTitle.xls\""); 129. else { 130. response.setHeader("Content-Dispositio n", "inline; filename=\"" + URLEncoder.encode(fileName, 131. "UTF-8") + ".xls\""); 132. } 133. 134. // Xls 格式的导出器 JRXlsAbstractExport JRXlsAbstractExporter exporter = getXlsExp 135. orter(); 136. // 在导出器中放入要导出的 japserPrintList 137. 138. exporter.setParameter(JRExporterParameter. JASPER_PRINT_LIST, jasperPrintList); 139. 140. exporter.setParameter(JRExporterParameter. OUTPUT_STREAM, ouputStream); 141. // 设置 Xls 的属性 142. exporter.setParameter(JRXlsAbstractExporte rParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE); 143. exporter.setParameter(JRXlsAbstractExporte rParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE); 144. // 导出 145. exporter.exportReport(); 146. } catch (JRException e) { 147. e.printStackTrace(); 148. throw new JasperReportException("在生成 XLS 报表时发生错误!"); 149. } 150. 151. finally { 152. if (ouputStream != null) { try { 153.

154. ouputStream.close(); 155. } catch (IOException ex) { 156. } } 157. 158. } 159. } catch (IOException ioe) { 160. ioe.printStackTrace(); 161. throw new JasperReportException("从 Response 中 取得 OutputStream 时发生错误!"); } 162. 163. 164. } 165. protected abstract JRXlsAbstractExporter getXlsExporte 166. r(); 167. 168. } java 代码

1. /** 2. * @copyRight Beijing Tsing-Tech Reachway Software Co.,Ltd. 3. * @author Jimmy.Shine 2007-5-13 4. */ 5. package cn.com.reachway.framework.report.export; 6. 7. import net.sf.jasperreports.engine.export.JRXlsAbstractExporter ; 8. import net.sf.jasperreports.engine.export.JRXlsExporter; 9. 10./** 11. * 利用报表使用 POI 生成 XLS 报表 12. */ 13.public class XlsPOIExport extends BaseExcelExport { 14. 15. protected JRXlsAbstractExporter getXlsExporter() { 16. return new JRXlsExporter(); 17. } 18. 19.} 20. java 代码

1. 2. 3. 4. 5. 6. 7. 8.

/** * @copyRight Beijing Tsing-Tech Reachway Software Co.,Ltd. * @author Jimmy.Shine 2007-5-13 */ package cn.com.reachway.framework.report.export; import net.sf.jasperreports.engine.export.JExcelApiExporter; import net.sf.jasperreports.engine.export.JRXlsAbstractExporter ;

9. 10./** 11. * 利用报表使用 JExcel 生成 xls 报表 12. */ 13.public class XlsJExcelExport extends BaseExcelExport { 14. 15. protected JRXlsAbstractExporter getXlsExporter() { 16. return new JExcelApiExporter(); 17. }

PDF 格式的: java 代码

1. /** 2. * @copyRight Beijing Tsing-Tech Reachway Software Co.,Ltd. 3. * @author Jimmy.Shine 2007-5-12 4. */ 5. package cn.com.reachway.framework.report.export; 6. 7. import java.io.IOException; 8. import java.io.OutputStream; 9. import java.net.URLEncoder; 10.import java.sql.Connection; 11.import java.util.List; 12.import java.util.Map; 13. 14.import javax.servlet.http.HttpServletRequest; 15.import javax.servlet.http.HttpServletResponse; 16. 17.import net.sf.jasperreports.engine.JRDataSource; 18.import net.sf.jasperreports.engine.JRException; 19.import net.sf.jasperreports.engine.JRExporterParameter;

20.import net.sf.jasperreports.engine.JasperPrint; 21.import net.sf.jasperreports.engine.export.JRPdfExporter; 22.import net.sf.jasperreports.j2ee.servlets.BaseHttpServlet; 23.import cn.com.reachway.framework.exception.JasperReportExceptio n; 24.import cn.com.reachway.framework.report.jasperPrint.JasperPrint WithConnection; 25.import cn.com.reachway.framework.report.jasperPrint.JasperPrint WithDataSource; 26. 27./** 28. * 29. */ 30.public class PDFExport { 31. 32. /** 33. * 导出报表 34. * 35. * @param request 36. * @param response 37. * @param reportFilePath 38. * @param params 39. * @param con 40. * @param fileName 41. * @throws JasperReportException 42. */ 43. public void export(HttpServletRequest request, HttpServletR esponse response, String reportFilePath, Map params, 44. Connection con, String fileName) throws JasperRepor tException { 45. 46. JasperPrint jasperPrint = new JasperPrintWithConnection (reportFilePath, params, con).getJasperPrint(); 47. // 将填充完的 japserPrint 放入 session 中。 48. request.getSession().setAttribute(BaseHttpServlet.DEFAU LT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint); 49. // 拿到 japserPrintList 50. List jasperPrintList = BaseHttpServlet.getJasperPrintLi st(request); 51. // 若没有 JasperPrintList,则抛出异常 52. if (jasperPrintList == null) { 53. throw new JasperReportException("在 Http Session 中 没有找到 JasperPrint List"); 54. }

55. 56. (); 57. 58. 59. 60. 61.

try { OutputStream ouputStream = response.getOutputStream

try { response.setContentType("application/pdf"); response.setCharacterEncoding("UTF-8"); if (fileName == null || fileName.equals("")) response.setHeader("Content-Disposition", " inline; filename=\"noTitle.pdf\""); 62. else 63. response.setHeader("Content-Disposition", " inline; filename=\"" 64. + URLEncoder.encode(fileName, "UTF8") + ".pdf\""); 65. // 使用 JRPdfExproter 导出器导出 pdf 66. JRPdfExporter exporter = new JRPdfExporter(); 67. // 设置 JasperPrintList 68. exporter.setParameter(JRExporterParameter.JASPE R_PRINT_LIST, jasperPrintList); 69. 70. exporter.setParameter(JRExporterParameter.OUTPU T_STREAM, ouputStream); 71. exporter.exportReport(); 72. } catch (JRException e) { 73. e.printStackTrace(); 74. throw new JasperReportException("在导出 pdf 格式 报表时发生错误"); 75. } finally { 76. if (ouputStream != null) { 77. try { 78. ouputStream.close(); 79. } catch (IOException ex) { 80. } 81. } 82. } 83. } catch (IOException ioe) { 84. ioe.printStackTrace(); 85. throw new JasperReportException("从 Response 中取得 OutputStream 时发生错误!"); 86. } 87. } 88. 89. /** 90. * 导出报表

91. * 92. * @param request 93. * @param response 94. * @param reportFilePath 95. * @param params 96. * @param dataSource 97. * @param fileName 98. * @throws JasperReportException 99. */ 100. public void export(HttpServletRequest request, HttpSer vletResponse response, String reportFilePath, Map params, 101. JRDataSource dataSource, String fileName) thro ws JasperReportException { 102. 103. JasperPrint jasperPrint = new JasperPrintWithDataS ource(reportFilePath, params, dataSource).getJasperPrint(); 104. // 将填充完的 japserPrint 放入 session 中。 request.getSession().setAttribute(BaseHttpServlet. 105. DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint); 106. // 拿到 japserPrintList 107. List jasperPrintList = BaseHttpServlet.getJasperPr intList(request); 108. // 若没有 JasperPrintList,则抛出异常 109. if (jasperPrintList == null) { throw new JasperReportException("在 110. Http Session 中没有找到 JasperPrint List"); 111. } try { 112. 113. OutputStream ouputStream = response.getOutputS tream(); 114. try { 115. response.setContentType("application/pdf") ; 116. response.setCharacterEncoding("UTF-8"); 117. if (fileName == null || fileName.equals("" )) 118. response.setHeader("Content-Dispositio n", "inline; filename=\"noTitle.pdf\""); 119. else 120. response.setHeader("Content-Dispositio n", "inline; filename=\"" 121. + URLEncoder.encode(fileName, "UTF-8") + ".pdf\""); // 使用 JRPdfExproter 导出器导出 pdf 122.

123. JRPdfExporter exporter = new JRPdfExporter (); 124. // 设置 JasperPrintList exporter.setParameter(JRExporterParameter. 125. JASPER_PRINT_LIST, jasperPrintList); 126. 127. exporter.setParameter(JRExporterParameter. OUTPUT_STREAM, ouputStream); exporter.exportReport(); 128. 129. } catch (JRException e) { 130. e.printStackTrace(); 131. throw new JasperReportException("在导出 pdf 格式报表时发生错误"); } finally { 132. 133. if (ouputStream != null) { 134. try { 135. ouputStream.close(); } catch (IOException ex) { 136. 137. } } 138. 139. } 140. } catch (IOException ioe) { ioe.printStackTrace(); 141. 142. throw new JasperReportException("从 Response 中 取得 OutputStream 时发生错误!"); 143. } 144. } 145. 146. }


JasperReport报表设计总结(一)(已完毕).txt

JasperReport报表设计总结(一)(已完毕) - JasperReport报表设计总结(一)(已完毕) 为了开发报表,已经拜读了一大堆的资料,其中大部分是重复的。可以看得出,国人...

JasperReport报表设计总结(三)(已完毕).txt

JasperReport报表设计总结(三)(已完毕)_IT/计算机_专业资料。JasperReport报表设计总结(三)( JasperReport报表设计总结(三)(已完毕) 由于在一个里面不能贴太多的...

JasperReport报表设计总结.doc

JasperReport报表设计总结 JasperReportJasperRep

JasperReport报表傻瓜式文档.doc

JasperReport报表傻瓜式文档 - JasperReports 报表傻瓜

JasperReport教程之报表设计.pdf

JasperReport教程之报表设计_计算机软件及应用_IT/计算机_专业资料。JasperReport 教程之报表设计在 JRXML 模板(或 JRXML 文件)中的 JasperReport 都是标准的 XML 文...

一种基于JasperReport的定制报表的实现.pdf

一种基于JasperReport的定制报表的实现 - Computer Scie

jasperreport初级教程之报表设计.pdf

jasperreport初级教程之报表设计_计算机软件及应用_IT/计算机_专业资料。jasperreport 初级教程之报表设计 在 JRXML 模板(或 JRXML 文件)中的 JasperReport 都是标准...

jasperreport入门教程之编译报表设计.pdf

jasperreport入门教程之编译报表设计_计算机软件及应用_IT/计算机_专业资料。jasperreport 入门教程之编译报表设计 我们在前面的章节中产生的 JasperReport 模板(JRXML ...

JasperReport教程之报表参数.pdf

JasperReport教程之报表参数 - JasperReport 教程之报表参数 填充一个报表的主要输入是:报表模板,参数和数据源。本章将介绍这些参数, 并在接下来的章节中,我们将...

jasperreport初级中文学习教程之报表设计.pdf

jasperreport 初级中文学习教程之报表设计 在 JRXML 模板(或 JRXML 文件)中的 JasperReport 都是标准的 XML 文件, 以.JRXML 扩展。所有 JRXML 文件包含标签<...

JasperReport 报表总结.doc

JasperReport 报表总结 - 为了开发报表,已经拜读了一大堆的资料,其

JasperReport报表概要设计.doc

JasperReport报表概要设计 - JasperReport 报表概要设计 报表概要 概要设计 一.背景概述 背景概述 JasperReport 应用方案参照郭总发的“JasperRepo...

JasperReport+iReport报表开发手册_图文.pdf

JasperReport+iReport报表开发手册 - JsperReport+iReport报表开发... 是一个免费、开源的纯 JAVA 报表工具和引擎,...是开源报 表引擎 JasperReport 的可视化设计工具...

JasperReports最终用户手册中文版第四章 报表设计.doc

JasperReports最终用户手册中文版第四章 报表设计 - 第四章 报表设计 注:CJSDN.COM haibo 译 转载请注明译者和出处 ethonsmith@hotmail.com “...

ireport制作jasperreport报表详细过程.doc

ireport制作jasperreport报表详细过程 - ireport 制作 jasperreport 报表详细过程(包括 jsp 端代码实现) 概述: 现在简要的介绍 Jasperrepo...

jasperreport初级教程之填充报表.pdf

同为比较常用的报表工具,FineReport 在报表实现过程中所需的代码量远少于 jasperreport,大部分的报表代码细节被隐藏,呈现出的是可视化的设计过程, 而且 FineReport ...

JasperReport+iReport报表工具详细开发手册.pdf

简介 JasperReport 是 Java 语言编写的报表引擎,它能解析.jasper 报表定义 文件,并最终产生面向最终用户的报表界面。 iReport 是一个可视化的报表模板设计工具, 使用...

JASPERREPORT生成报表.txt

JASPERREPORT生成报表 - nt对象,和设置导出时的session *

JasperReport教程之报表数据源.pdf

JasperReport教程之报表数据源_计算机软件及应用_IT/...数据源的实现 下表总结了数据源和它们的实现类。 ...设计过 程,具体到数据源部分,如下: FineReport ...

JasperReport创建多个子报表.doc

但网上资料重复,而 且方法各种各样,通过多方面的尝试,结合大家的方面,总结了一...报表设计及工具的选择之... 100页 1下载券 jasperreport+ireport开... 24页...