jasperreport制作报表(二)使用JavaBean封装成List作为数据源
2009-05-20 17:13
489 查看
前言
使用JDBC作为报表数据源其实是有很多缺陷的,例如,它要求使用SQL查询作为数据来源,但有时报表的内容并不能由一条SQL语句完成。因此,使用JavaBean集合作为数据源才是终极的解决之道,用户只需要将数据整理到一个JavaBean集合之中就可以了.
1.定义Bean
/**
*
*/
package com.leagsoft.userManager.bean;
import java.io.Serializable;
/**
* @author panh
*
*/
public class User implements Serializable {
/**
*
*/
private static final long serialVersionUID = -2457373131520432381L;
private String userid;
private String username;
private String userpwd;
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getUserpwd() {
return userpwd;
}
public void setUserpwd(String userpwd) {
this.userpwd = userpwd;
}
}
jasperreport 生成pdf报表数据源为List,我采用的是spring mvc 框架,代码如下:
/**
*
*/
package com.leagsoft.userManager.controller;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.util.JRLoader;
import org.springframework.web.servlet.ModelAndView;
import com.leagsoft.common.controller.Controller;
import com.leagsoft.userManager.bean.User;
import com.leagsoft.userManager.dao.UserDao;
/**
* @author panh
*
*/
public class UserController extends Controller {
private UserDao userDao;
@Override
protected ModelAndView handleInternal(HttpServletRequest request,
HttpServletResponse response, String method) throws Exception {
Map<String, Object> model=new TreeMap<String, Object>();
if("true".equals(method)) {
//从Dao中获取数据
List<User> userList=userDao.queryUsers();
String path="D://work//jasper_report//sample.jasper";
try {
Map<String, String> parameters = new HashMap<String, String>();
parameters.put("title", "流量统计报表");
//设置数据源
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(userList);
//生成JasperPrint
JasperReport jasperReport = (JasperReport)JRLoader.loadObject(path);
JasperPrint jasperPrint=JasperFillManager.fillReport(jasperReport, parameters, ds);
//设置输出格式
ServletOutputStream ouputStream = response.getOutputStream();
response.setContentType("application/pdf");
response.setCharacterEncoding("UTF-8");
// 使用JRPdfExproter导出器导出pdf
JRPdfExporter exporter=new JRPdfExporter();
//设置JsperPrintList
exporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);
exporter.exportReport();
ouputStream.close();
} catch (JRException jre) {
jre.printStackTrace();
System.out.println("JRException:" + jre.getMessage());
} catch (Exception e) {
e.printStackTrace();
System.out.println("----- Exception:" + e.getMessage());
}
return null;
}else
return new ModelAndView("error","model",model);
}
public byte[] generatePDF(Map<String, String> parameters, String reportFilePath,List list) throws Exception {
try {
//设置数据源
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(list);
JasperPrint jasperPrint = JasperFillManager.fillReport(reportFilePath, parameters, ds);
return JasperExportManager.exportReportToPdf(jasperPrint);
} catch (JRException e) {
e.printStackTrace();
throw new RuntimeException("Report Export Failed.");
}
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
}
使用JDBC作为报表数据源其实是有很多缺陷的,例如,它要求使用SQL查询作为数据来源,但有时报表的内容并不能由一条SQL语句完成。因此,使用JavaBean集合作为数据源才是终极的解决之道,用户只需要将数据整理到一个JavaBean集合之中就可以了.
1.定义Bean
/**
*
*/
package com.leagsoft.userManager.bean;
import java.io.Serializable;
/**
* @author panh
*
*/
public class User implements Serializable {
/**
*
*/
private static final long serialVersionUID = -2457373131520432381L;
private String userid;
private String username;
private String userpwd;
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getUserpwd() {
return userpwd;
}
public void setUserpwd(String userpwd) {
this.userpwd = userpwd;
}
}
jasperreport 生成pdf报表数据源为List,我采用的是spring mvc 框架,代码如下:
/**
*
*/
package com.leagsoft.userManager.controller;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.util.JRLoader;
import org.springframework.web.servlet.ModelAndView;
import com.leagsoft.common.controller.Controller;
import com.leagsoft.userManager.bean.User;
import com.leagsoft.userManager.dao.UserDao;
/**
* @author panh
*
*/
public class UserController extends Controller {
private UserDao userDao;
@Override
protected ModelAndView handleInternal(HttpServletRequest request,
HttpServletResponse response, String method) throws Exception {
Map<String, Object> model=new TreeMap<String, Object>();
if("true".equals(method)) {
//从Dao中获取数据
List<User> userList=userDao.queryUsers();
String path="D://work//jasper_report//sample.jasper";
try {
Map<String, String> parameters = new HashMap<String, String>();
parameters.put("title", "流量统计报表");
//设置数据源
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(userList);
//生成JasperPrint
JasperReport jasperReport = (JasperReport)JRLoader.loadObject(path);
JasperPrint jasperPrint=JasperFillManager.fillReport(jasperReport, parameters, ds);
//设置输出格式
ServletOutputStream ouputStream = response.getOutputStream();
response.setContentType("application/pdf");
response.setCharacterEncoding("UTF-8");
// 使用JRPdfExproter导出器导出pdf
JRPdfExporter exporter=new JRPdfExporter();
//设置JsperPrintList
exporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);
exporter.exportReport();
ouputStream.close();
} catch (JRException jre) {
jre.printStackTrace();
System.out.println("JRException:" + jre.getMessage());
} catch (Exception e) {
e.printStackTrace();
System.out.println("----- Exception:" + e.getMessage());
}
return null;
}else
return new ModelAndView("error","model",model);
}
public byte[] generatePDF(Map<String, String> parameters, String reportFilePath,List list) throws Exception {
try {
//设置数据源
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(list);
JasperPrint jasperPrint = JasperFillManager.fillReport(reportFilePath, parameters, ds);
return JasperExportManager.exportReportToPdf(jasperPrint);
} catch (JRException e) {
e.printStackTrace();
throw new RuntimeException("Report Export Failed.");
}
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
}
相关文章推荐
- jasperreport学习 之 javabean封装成list作为数据源
- 使用Javabean作为数据源的JasperReport报表(通过WebService/RMI调用数据)
- 读取jrxml文件生成JasperReport 子报表, javabean作为数据源
- jasperreport学习之javabean封装成list作为数据源
- Java开源报表JasperReport、iReport4.5.1使用详解(四)-JavaBean数据源
- jasperreport中可以使用List作为数据源
- JasperReport 报表在SpringMVC WEB项目中的应用(JavaBean作为数据源)
- ireport+jasperreport开源报表中使用javabean作为数据源的详细实现过程
- JasperReport 报表在SpringMVC WEB项目中的应用(JavaBean作为数据源)
- iReport 使用JavaBean作为数据源开发报表(SSM)
- jasperreport 使用子报表(使用JavaBean集合作为数据源)
- [翻译]如何使用webservice作为数据源去生成Microsoft Reporting Services 2005的报表 (转)
- 使用Jasperreport作为报表控件开发Web 报表应用
- 使用JasperReport制作PDF,Excel报表(Struts2实现)
- 使用eclipse在jsp上显示水晶报表(七)用sql 命令对象作为数据源1
- 使用Data Template作为BIP报表的数据源
- 使用JasperReport ireport制作报表在liunx出错
- ireport使用javabean作为数据源的实现
- 使用Data Template作为BIP报表的数据源
- 第二部分:使用Jasperreport作为报表控件开发胖客户端报表应用