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;
	}

	@Override
	public 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;
	}

	@Override
	public 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

猜你喜欢

转载自orange5458.iteye.com/blog/1889516