您的位置:首页 > 编程语言 > ASP

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

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: