先弄清ireport和jasper之间的关系。
ireport说到底是一个工具,而且是好工具,首先是免费(这非常重要),其次是免费正版,第三提高了象我这样常常写报表人的效率。
如果您熟悉jasper规范,自己即可用其它工具手工编写xml文档,因为ireport最终一定要产生两个东西xml和jasper,不过我想,誰要喜欢手动编写整个xml,一定是有病,要么就是太闲了。
这里介绍的是用javabean作数据源。先贴最重要的一段代码,
List<Customer> data = new ArrayList<Customer>(); //Customer是bean
data.add(c);
//获取数据源
JRDataSource dataSource = new JRBeanCollectionDataSource(data);
ServletOutputStream ouputStream = null;
try {
//找到.jasper报表的路径
String jasper = "/WEB-INF/classes/reportTest.jasper";
String cd=ServletActionContext.getServletContext().getRealPath(jasper);
// 生成JasperPrint
JasperReport report = (JasperReport) JRLoader.loadObject(cd);
//将参数置入报表,参数包括报表文件路径、报表接收的传入参数(以Map类提供)、报表数据源
JasperPrint jasperPrint = JasperFillManager.fillReport(report, null, dataSource);
System.out.println("填充报表......");
//设定输出格式
HttpServletResponse resp = ServletActionContext.getResponse();
ouputStream = resp.getOutputStream();// resp.getOutputStream();
resp.setContentType("application/pdf");
resp.setCharacterEncoding("UTF-8");
resp.setHeader("Content-Disposition", "attachment; filename="+ URLEncoder.encode("PDF报表", "UTF-8") + ".pdf");
// 使用JRPdfExproter导出器导出pdf
JRPdfExporter exporter = new JRPdfExporter();
// 设置JasperPrintList
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);
exporter.exportReport();
ouputStream.close();
}catch(Exception e){
e.printStackTrace();
System.out.println("输出报表失败!原因:"+e.getMessage());
}
数据源已经定义好,现在可以用ireport的可视化工具来做报表了。用法可以参考
http://blog.csdn.net/lldwolf/archive/2008/06/19/2564554.aspx