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

添加统计信息

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

  • 本页合计:只统计本页的数据
  • 累计合计:截至当前页为止的数据合计
  • 总合计:所有数据的合计

我在此仍然使用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
	{
		
	}
}

代码与以前的代码相似度很高,阴影部分的代码是设定一个合计值,因为只是示例,我在此偷了个懒,直接把结果给传过去了。结果如下图所示:

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值