您的位置:首页 > 其它

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

2008-10-16 12:13 295 查看

添加统计信息

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

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

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

}
}

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

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