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”加入參数:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGJzb25nNzU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

按上图蓝色数字编号依次配置好。这一步的关键是:$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的一致(測试数据一样):

Java程序生成linechart report的方法的更多相关文章

  1. Java程序生成exe可执行文件详细教程(图文说明)

    ava程序打包成exe可执行文件,分为两大步骤. 第一步:将Java程序通过Eclipse或者Myeclipse导成Jar包 第二步:通过exe4j讲Jar包程序生成exe可执行文件 第一步详解: 将 ...

  2. Java程序生成exe可执行文件

    Java程序打包成exe可执行文件,分为两大步骤. 第一步:将Java程序通过Eclipse或者Myeclipse导成Jar包 第二步:通过exe4j讲Jar包程序生成exe可执行文件 第一步详解: ...

  3. 理解JAVA - 面向对象(object) - 属性,方法

    理解JAVA - 面向对象(object) - 属性,方法 多态的体现:    向上造型,父类接收子类对象:向上造型:    从父类角度看不到子类独有的方法:面向对象,人类认知世界的方式:生活中每天都 ...

  4. Java 字符串拼接 五种方法的性能比较分析 从执行100次到90万次

    [请尊重原创版权,如需引用,请注明来源及地址] > 字符串拼接一般使用“+”,但是“+”不能满足大批量数据的处理,Java中有以下五种方法处理字符串拼接,各有优缺点,程序开发应选择合适的方法实现 ...

  5. 工作随笔——Java调用Groovy类的方法、传递参数和获取返回值

    接触Groovy也快一年了,一直在尝试怎么将Groovy引用到日常工作中来.最近在做一个功能的时候,花了点时间重新看了下Java怎么调用Groovy的方法.传递参数和获取返回值. 示例Groovy代码 ...

  6. java 调用webservice的各种方法总结

    java 调用webservice的各种方法总结 几种流行的开源WebService框架Axis1,Axis2,Xfire,CXF,JWS比较 方法一:创建基于JAX-WS的webservice(包括 ...

  7. Java 获取当前系统时间方法比较

    转载: http://blog.csdn.net/zzjjiandan/article/details/8372617 一. 获取当前系统时间和日期并格式化输出: import java.util.D ...

  8. JAVA下的Thread.sleep方法一定要try

    try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } 不同于C#,JAVA里的Thre ...

  9. paip兼容windows与linux的java类根目录路径的方法

    paip兼容windows与linux的java类根目录路径的方法 1.只有 pathx.class.getResource("")或者pathx.class.getResourc ...

随机推荐

  1. u-boot中的Makefile

    在windos下,pc机上电之后,BIOS会初始化硬件配置,为内核传递参数,引导操作系统启动,并且识别C盘.D盘.等整个操作系统启动起来之后,才可以运行应用程序比如QQ.QQ音影.同理,在嵌入式Lin ...

  2. python模块之itertools

    在循环对象和函数对象中,我们了解了循环器(iterator)的功能.循环器是对象的容器,包含有多个对象.通过调用循环器的next()方法 (__next__()方法,在Python 3.x中),循环器 ...

  3. 最全Pycharm教程(26)——Pycharm搜索导航之文件名、符号名搜索(转)

    1.准备一个工程 向你的工程中添加一个Python文件,并输入一些源码,例如: 2.转到对应文件.类.符号 Pycharm提供的一个很强力的功能就是能够根据名称跳转到任何文件.类.符号所在定义位置. ...

  4. PHP中的魔术方法和关键字

    PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep ...

  5. 查找内容grep命令

    标准unix/linux下的grep通过以下参数控制上下文 grep -C 5 foo file 显示file文件中匹配foo字串那行以及上下5行 grep -B 5 foo file 显示foo及前 ...

  6. C++实践积累

    C++ STL vector 如何彻底清空一个vector? 实践证明,vector.clear()并不能把vector容量清空,只会让vector.size()变为零,依然很占内存.那如何让vect ...

  7. Cookie 与 网络通信

    通信协议是什么?(ftp.http.https.file...) 交流的规则 举例: 汉语.英语.法语.德语 (百度百科:通信协议) 通信协议是指双方实体完成通信或服务所必须遵循的规则和约定.通过通信 ...

  8. Map 的四种遍历方式

    Map 的四种遍历方式 import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class ...

  9. Java(静态)变量、(静态)代码块、构造方法的执行顺序

    Java(静态)变量.(静态)代码块.构造方法的执行顺序 总结 1.父类静态变量和静态代码块(先声明的先执行); 2.子类静态变量和静态代码块(先声明的先执行); 3.父类的变量和代码块(先声明的先执 ...

  10. thinkphp5.0自动加载

    概述 ThinkPHP5.0 真正实现了按需加载,所有类库采用自动加载机制,并且支持类库映射和composer类库的自动加载. 自动加载的实现由think\Loader类库完成,自动加载规范符合PHP ...