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

jasperreport整合structs2导出PDF,Excel等报表

2014-03-05 15:00 609 查看
        今天实现了structs2导出PDF报表和Excel报表。

         这是structs2导出PDF的报表:

         public String CategoryReport(){
try {
HttpServletResponse response = ServletActionContext.getResponse();
String reportSource;
Map params = new HashMap();
category.setTotalSize(categoryService.count());
myList=categoryService.findCurrentData(category);
for(Category s:myList){
System.out.println(s.getName()+"------"+s.getDescri());
}
reportSource = ServletActionContext.getServletContext().getRealPath("/jasper/report5_3.jrxml");
File parent = new File(reportSource).getParentFile();
JasperCompileManager.compileReportToFile(reportSource, new File(parent, "compiled_jasper_template.jasper")
.getAbsolutePath());

OutputStream outputStream=response.getOutputStream();
File reportFile = new File(ServletActionContext.getServletContext().getRealPath("/jasper/compiled_jasper_template.jasper"));
if (!reportFile.exists()){
throw new JRRuntimeException("File dispatch_report.jasper not found.");
}
JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath());

JRBeanCollectionDataSource dataSource=new JRBeanCollectionDataSource(myList);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,params, dataSource);

JRPdfExporter pdfExporter=new JRPdfExporter();
pdfExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
pdfExporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outputStream);
response.setContentType("application/pdf");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode("Medicine报表", "UTF-8") + ".pdf\"");
pdfExporter.exportReport();
outputStream.flush();
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}

return "success";

}首先是我们用Ireport制作好的报表模板,我的报表模板是:
report5_3.jrxml
通过JasperCompileManager将报表模板编译成...jasper的文件, 我们可以创建一个JasperReport的对象,通过JRBeanCollectionDataSource 得到报表输出的数据源,这段代码中myList就是一个从后台获取数据的ArrayList。

然后我们可以得到一个JasperPrint对象来打印出数据来,而JasperPrint对象是通过JasperFillManager类来得到。

最后通过 JRPdfExporter对象实现导出报表就可以了啊。

这是导出PDF,Excel报表用到的几个类。

1.  net.sf.jasperreports.engine.JasperCompileManager类。

    使用这个类的几个静态方法即可完成对报表的编译工作(具体参见api文档)

    编译完成后可以JasperCompileManager有两种处理方式:

       1> 返回一个JasperReport对象

       2> 在.jrxml文件所在的目录生成一个.jasper文件

    这两种方式是由程序员自己选择的。不过我比较倾向使用.jasper文件,毕竟报表的结构不是每天都在改动,所以每次重新编译报表并不是很划算。

2.  net.sf.jasperreports.engine.JasperFillManager类

    这个类的作用是用数据填充报表。它可以使用JasperReport对象也可以使用。jasper文件做为报表模板。

    它同样有2中处理方式:

          1> 返回一个JsaperPrint对象。

          2> 在.jasper文件所在目录生成一个.jrprint文件

    这个类使用net.sf.jasperreports.engine.JRDataSource接口的实现做为数据源。任何实现了JRDataSource的类均可做为数据源使用

    在net.sf.jasperreports.engine.data包中定义了一些数据源,可根据自己的需要选择。这里我使用的是JRTableModelDataSource做为

    数据源(因为我的报表还要显示在Table中)。

3. net.sf.jasperreports.engine.JasperPrintManager和net.sf.jasperreports.engine.JasperExportManager

   者两个类的作用是打印、导出报表

   他们使用 JasperPrint 和 .jrprint文件做为输入。

   可以根据自己的需要使用里面的方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐