1 导入坐标 2 获取jasper文件 3 创建jrprint对象(文件+数据) 4 以pdf形式导出
<!--jasper坐标-->
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.5.0</version>
</dependency>
<dependency>
<groupId>org.olap4j</groupId>
<artifactId>olap4j</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.1.7</version>
</dependency>
pdf导出,但是是静态的pdf(即制作好的pdf模板静态样式),map和列表DataSource都是空的。后面可以动态在数据库获取
// 加载jasper文件
String path=request.getsession.getServletContext().getRealPath("/")+
"/jasper/demo01.jasper";
// 创建jrPrint
// 文件的输入流
// map类型的参数
// 列表类型的参数 empty表示空的DataSource类型
FileInputStream file = new FileInputStream(path);
Map map = new HashMap();
JREmptyDataSource jrEmptyDataSource = new JREmptyDataSource();
//拿到jsperprint
JasperPrint jasperPrint = JasperFillManager.fillReport(file,map,jrEmptyDataSource); // 导出
JasperExportManager.exportReportToPdfStream(jasperPrint,response.getOutputStream())
注意有中文问题,程序中需要导入配置中文的xml等,不然不显示中文。
第二步:动态数据写到Jasper pdf中。
首先Jasper用studio生成时,要添加map或者list的字段。name和value的值要设置好。
1:map的参数填充
//绝对路径 项目名加jasper所在位置
String path=request.getsession.getServletContext().getRealPath("/")+"/jasper/demo2.jasper"; //参数1
FileInputStream file = new FileInputStream(path);
//参数2
Map param=new HashMap();
param.put("userName","jack");
param.put("email","123@qq.com");
param.put("companyName","企业");
param.put("deptName","部门");
//参数3
JREmptyDataSource ds = new JREmptyDataSource();
JasperPrint jasperPrint = JasperFillManager.fillReport(file, param, ds);
//导出
JasperExportManager.exportReportToPdfStream(jasperPrint,response.getOutputStream());
2:数据源填充:
分为两种,一种是连接数据库,一种是自己设置list
数据库连接,内部自动查询
String path=session.getServletContext().getRealPath("/")+"/jasper/demo3.jasper"; //参数1
FileInputStream file = new FileInputStream(path);
//参数2
Map param=new HashMap();
//参数3
Class.forName("com.mysql.jdbc.Driver"); Connection connection = DriverManager.getConnection("jdbc:mysql:///库", "用户名", "密码"); JasperPrint jasperPrint = JasperFillManager.fillReport(file, param, connection);
//导出
JasperExportManager.exportReportToPdfStream(jasperPrint,response.getOutputStream());
自己构造list
String path=session.getServletContext().getRealPath("/")+"/jasper/demo04.jasper";
报表制作
1:分组报表
//参数1
FileInputStream file = new FileInputStream(path);
//参数2
Map param=new HashMap();
//参数3
List<User> list=new ArrayList<>();
for(int i=0;i<10;i++){
User user = new User();
user.setUserName("用户名"+i);
user.setEmail("邮箱@"+i);
user.setCompanyName("所属企业"+i);
user.setDeptName("部门"+i);
list.add(user);
}
//不能直接用list。转换成Jasper的集合Bean
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(list);
JasperPrint jasperPrint = JasperFillManager.fillReport(file, param, ds);
//导出
JasperExportManager.exportReportToPdfStream(jasperPrint,response.getOutputStream());
提供一个将对象转成map 的工具类
public class BeanMapUtils {
/**
* 将对象属性转化为map结合
*/
public static <T> Map<String, Object> beanToMap(T bean) {
Map<String, Object> map = new HashMap<String, Object>();
if (bean != null) {
BeanMap beanMap = BeanMap.create(bean);
for (Object key : beanMap.keySet()) {
map.put(key+"", beanMap.get(key));
}
}
return map;
}
/**
* 将map集合中的数据转化为指定对象的同名属性中
*/
public static <T> T mapToBean(Map<String, Object> map,Class<T> clazz) throws Exception {
T bean = clazz.newInstance();
BeanMap beanMap = BeanMap.create(bean);
beanMap.putAll(map);
return bean;
}
}