iReport 笔记(八) 添加统计信息 【转】

来源:互联网 发布:phoneshop mac 编辑:程序博客网 时间:2024/05/18 12:44

添加统计信息
本节说明如何添加本页合计、累计合计、总合计三种类型的统计信息,说明如下:

本页合计:只统计本页的数据
累计合计:截至当前页为止的数据合计
总合计:所有数据的合计
我在此仍然使用JavaBean集合作为数据源,JavaBean类很简单,只有一个整型成员,如下所示:

package lld.test.ireport;

public class NumberBean
{
 private int number;

 public int getNumber()
 {
  return this.number;
 }

 public void setNumber(int number)
 {
  this.number = number;
 }
}
报表将为这个整型成员number进行上述三种统计,制作的报表如下图所示:

其中sumValue是一个Parameter,表示累计合计,定义如下图所示:

其中Vaiable Expression的值为

new java.lang.Integer($V{sumValue}.intValue() + $F{number}.intValue())PAGE_SUM 表示本页合计,也是一个Variable,定义如下图所示:

与sumReport的定义基本相同,只是“Reset Type”设为Page,而不是Report。

SUM_VALUE 表示总合计,是一个Parameter,由外部传入,因为在打印前,总合计信息可提前获知,定义如下图所示:

用于生成报表的Servlet程序如下所示:

package lld.test.ireport;

import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRExporterParameter;
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;

public class SummaryReportServlet extends HttpServlet
{

 private static final long serialVersionUID = 3226292331974282393L;

 @Override
 protected void doGet(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException
 {
  this.doPost(req, resp);
 }

 @Override
 protected void doPost(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException
 {
  try
  {
   String root_path = this.getServletContext().getRealPath("/");
   root_path = root_path.replace('//', '/');
   String reportFilePath = root_path + "WEB-INF/classes/lld/test/ireport/summary_rep.jasper";
   JRDataSource dataSource = this.createDataSource();

   Map<String,Object> params = new HashMap<String, Object>();
   params.put("SUM_VALUE", new Integer(19900));  //设定合计值
   JasperReport report = (JasperReport)JRLoader.loadObject(reportFilePath);
   JasperPrint jasperPrint = JasperFillManager.fillReport(report, params, dataSource);

         OutputStream ouputStream = 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(); 
         exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
         exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);
        
         exporter.exportReport();
        
        
         ouputStream.close(); 

  }catch(Exception ex)
  {
   ex.printStackTrace();
  }
  
  
 }
 
 private JRDataSource createDataSource()
 {
  //生成测试数据
  ArrayList<NumberBean> beans = new ArrayList<NumberBean>();
  for(int i = 0; i < 200; i++)
  {
   NumberBean bean = new NumberBean();
   bean.setNumber(i);
   beans.add(bean);
  }

  return new JRBeanCollectionDataSource(beans);
 }

 public static void main(String[] args) throws Exception
 {
  
 }
}代码与以前的代码相似度很高,阴影部分的代码是设定一个合计值,因为只是示例,我在此偷了个懒,直接把结果给传过去了。结果如下图所示:

注: 如需本例示例代码, 请留言.

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lldwolf/archive/2008/06/29/2596769.aspx

原创粉丝点击