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

        今天实现了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文件做为输入。
   可以根据自己的需要使用里面的方法。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值