Jasperreport应用小结
1.简介
JasperReport是一个强大、灵活的JAVA开源报表生成工具,能够展示丰富的页面内容,并将之转换成PDF,HTML,或者XML格式,可以用于在各种Java应用程序,包括J2EE,Web应用程序中生成动态内容。
JasperReport生成报表的过程如图所示。
1)File Jasper报表模板文件:xml文件,屏蔽不同目标报表文件的差异,通常使用IReport进行配置,后缀为.jrxml
2)Paramter:参数,图中HashMap部分,用于填充报表模板文件
3)JRDataSource:数据源,用于填充报表模板文件
4)JasperReports Engine:JasperReport库的统称,主要功能如下:
编译File Jasper报表模板文件,通常直接使用IReport进行编译,后缀名为.jasper
加载编译后的.jasper文件
使用Parameter和JRDataSource填充报表
生成对应类型的报表文件
2.一般步骤
1)使用IReport配置JasperReport模板文件,注:IReport必须要和程序中使用的JasperReport版本相匹配
2)将IReport编译生成的.jasper文件放在应用可见的文件夹中
3)导入JasperReport库到应用中
4)编写代码
3.实例
下面我将按上述过程实现一个学生成绩单
1)IReport配置JasperReport模板文件
本人使用的IReport版本为5.1.0,对应的JasperRepor版本为5.1.0以上,过程略,配置结果如下图所示:
JXML文件&JASPER文件
附件iReport_files.zip
注:由于配置Parameter和DataSource时需要指定数据类型,所以已经编写了应用的部分代码,并且将应用的classpath导入到IReport中
2)将IReport编译生成的.jasper文件放在应用可见的文件夹中
3)导入JasperReport库到应用中
本次实例将生成xls和pdf两种格式的报表,所以使用的类库有,这些类均可在JasperReport和IReport下载包中获取
?
?
4)编写代码
--Student.java
package com.siyuan.jptest.entity;import java.io.Serializable;import java.util.ArrayList;import java.util.Date;import java.util.List;public class Student implements Serializable{private static final long serialVersionUID = -7272480669298422204L;private long id;private String name;private Date birth;private String sex;private int gradeNO;private int classNO;private List<Subject> subjects = new ArrayList<Subject>();public Student() {}public long getId() {return id;}public void setId(long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Date getBirth() {return birth;}public void setBirth(Date birth) {this.birth = birth;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public int getGradeNO() {return gradeNO;}public void setGradeNO(int gradeNO) {this.gradeNO = gradeNO;}public int getClassNO() {return classNO;}public void setClassNO(int classNO) {this.classNO = classNO;}public List<Subject> getSubjects() {return subjects;}public void setSubjects(List<Subject> subjects) {this.subjects = subjects;}@Overridepublic String toString() {return "Student [id=" + id + ", name=" + name + ", birth=" + birth+ ", sex=" + sex + ", gradeNO=" + gradeNO + ", classNO="+ classNO + "]";}}?--Subject.java
package com.siyuan.jptest.entity;import java.io.Serializable;public class Subject implements Serializable{private static final long serialVersionUID = -3255077398595884176L;private long id;private String name;private int mark;public Subject() {}public long getId() {return id;}public void setId(long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getMark() {return mark;}public void setMark(int mark) {this.mark = mark;}@Overridepublic String toString() {return "Subject [id=" + id + ", name=" + name + ", mark=" + mark + "]";}}?--JPReportGenerator.java
package com.siyuan.jptest.report;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import net.sf.jasperreports.engine.JRException;import net.sf.jasperreports.engine.JRExporterParameter;import net.sf.jasperreports.engine.JasperFillManager;import net.sf.jasperreports.engine.JasperPrint;import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;import net.sf.jasperreports.engine.export.JRPdfExporter;import net.sf.jasperreports.engine.export.JRXlsExporter;import net.sf.jasperreports.engine.export.JRXlsExporterParameter;import com.siyuan.jptest.entity.Student;import com.siyuan.jptest.entity.Subject;public class JPReportGenerator {/** * @param args * @throws ParseException * @throws JRException */public static void main(String[] args) throws ParseException, JRException {Student stu = new Student();stu.setId(21105001626L);stu.setName("张三");stu.setBirth(new SimpleDateFormat("yyyy-MM-dd").parse("1996-10-11"));stu.setSex("男");stu.setGradeNO(3);stu.setClassNO(1);List<Subject> subs = new ArrayList<Subject>();Subject sub1 = new Subject();sub1.setId(1);sub1.setName("语文");sub1.setMark(80);subs.add(sub1);Subject sub2 = new Subject();sub2.setId(2);sub2.setName("数学");sub2.setMark(90);subs.add(sub2);Subject sub3 = new Subject();sub3.setId(3);sub3.setName("英语");sub3.setMark(88);subs.add(sub3);stu.setSubjects(subs);Map<String, Object> params = new HashMap<String, Object>();params.put("studentInfo", stu);JasperPrint jpPrint = JasperFillManager.fillReport("F:/workspace-test/jptest/bin/com/siyuan/jptest/report/studentReport.jasper", params, new JRBeanCollectionDataSource(subs));JRXlsExporter xlsExporter = new JRXlsExporter();xlsExporter.setParameter(JRExporterParameter.JASPER_PRINT, jpPrint);xlsExporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, "studentReport.xls");xlsExporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, true);xlsExporter.setParameter(JRXlsExporterParameter.IS_FONT_SIZE_FIX_ENABLED, false);xlsExporter.exportReport();JRPdfExporter pdfExporter = new JRPdfExporter();pdfExporter.setParameter(JRExporterParameter.JASPER_PRINT, jpPrint);pdfExporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, "studentReport.pdf");pdfExporter.exportReport();}}5)运行结果
略(生成的报表像素大小和IReport配置的不一致,暂没找到合适的解决方法)
4.参考资料
jaspersoft官网地址:
http://community.jaspersoft.com/
jasperreport最新下载地址:
http://community.jaspersoft.com/project/jasperreports-library/releases
ireport最新下载地址:
http://community.jaspersoft.com/project/ireport-designer/releases
jasperreport简介
http://baike.baidu.com/view/1662522.htm
jasperreport pdf中文显示?
http://hzz6222003.blog.163.com/blog/static/49716601201282443049323/
jasperreport常用参数说明
http://www.blogjava.net/lifw/archive/2009/08/04/289815.html