Java程序生成linechart report的方法

iReport通常是一个设计阶段的工具,用来设计出报表的排版和内容,报表的动态生成需要程序来实现(毕竟报表的数据是动态的,数量是很多的,不可能用iReport Preview的方式一个个手工去生成)。利用上一篇iReport5.6.0linechart制作方法http://blog.csdn.net/hbsong75/article/details/39992475)生成.jasper文档后,就可以通过Java程序的方法来动态生成linechart报表了。

程序生成报表的要素主要是下面三点:

1.        iReport 通过parameters获取数据;

1)        主报告Parameters增加resultsList 参数


这个参数接下来要用来接收从程序的MAP中传过来的子数据集;

2)        子数据集(subDataSet)配置Parameter

在Summary band中选择linechart元素,右键选择“CharData“,在弹出的对话框中选择”Parameters” tab 页,在这里我们将要配置如何从程序中接收子数据集的数据源:

 

点击“Add”添加参数:

 

按上图蓝色数字编号依次配置好,这一步的关键是:$P{REPORT_PARAMETERS_MAP}.get("resultsList"),其中在后面的程序中传递数据源的键值需要时“resultsList”,跟这里的key值要一致,否则就获取不到传递的数据了。

配置完成后点击“CompileReport“,重新生成.jasper文件。

 

2.        调用JasperRunManager的几个静态方法,如runReportToPdf,runReportToHtmlFile等;

示例程序如下:(TestBean.java参考上文)

package com.report.linechart;
 
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
 
public class TestReportGenerator {
    /**
     * @param args
     */
    public static void main(String[] args) {   
        List<TestBean> testBeans = new ArrayList<TestBean>();
        TestBean tb1 = new TestBean();
        tb1.setCat("1");
        tb1.setValue(1);
        testBeans.add(tb1);
        TestBean tb2 = new TestBean();
        tb2.setCat("2");
        tb2.setValue(2);
        testBeans.add(tb2);    
        File reportFile = new File("D:\\workspace\\jasperreport\\linecharReport\\testLineReport.jasper");
        File reportPdfFile = new File("D:\\workspace\\jasperreport\\linecharReport\\testLineReport.pdf");
        Map<String,Object> parameters=new HashMap<String,Object>();
        JRBeanCollectionDataSource resultsList = new JRBeanCollectionDataSource(testBeans);
       
        parameters.put("resultsList", resultsList);
        parameters.put("reportTitle", "This is a test report");
        try {
            byte[] reportStream = JasperRunManager.runReportToPdf(reportFile.getPath(),parameters,new JREmptyDataSource());
            FileOutputStream fw = new FileOutputStream(reportPdfFile);
            fw.write(reportStream);
            fw.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

3.        通过iReport的Parameters关联数据源

可以看到,resultsList是JRBeanCollectionDataSource类型,程序中通过 parameters.put("resultsList",resultsList),将linechart需要用到的TestBean数据集合进行了传递;相对应的,iReport的配置中$P{REPORT_PARAMETERS_MAP}.get("resultsList") 获取了该数据集。

 

最后执行该测试程序,可以发现在D:\workspace\jasperreport\linecharReport目录下生成了testLineReport.pdf文件,打开该PDF文件,看到与在iReport中Preview的一致(测试数据一样):

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。