ireport 使用list数据源
刚开始学ireport是使用sql作为数据源,因为直接sql是最简单也最容易上手的,但是sql已经无法满足现在的业务需求了,于是乎寻找其他的解决方案,于是乎找到了JRDataSource数据源。个人觉得sql数据源最简单,其次就是JRDataSource数据源了。
一、使用JRDataSource数据源首先要实现 JRRewindableDataSource 接口
/*** @Author: BlueSky* @CreateTime: 2020-01-06 13:50* @Description:*/import java.util.List;import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRField;
import net.sf.jasperreports.engine.JRRewindableDataSource;public class GenericDataSource implements JRRewindableDataSource{int index;List<PrintRecord> records;public GenericDataSource(List<PrintRecord> records) {this.records = records;this.index = -1;}@Overridepublic Object getFieldValue(JRField jrField) throws JRException {String fieldName = jrField.getName();return records.get(index).getValue(fieldName);}@Overridepublic boolean next() throws JRException {++index;return index < records.size();}public void moveFirst() {}
}
二、新建一个通用打印的类
/*** @Author: BlueSky* @CreateTime: 2020-01-06 13:51* @Description:*/import java.util.HashMap;
import java.util.Map;public class PrintRecord {public static final int KEY_NOT_FOUND = -1;Map<String, Object> vals;public PrintRecord() {vals = new HashMap<String, Object>();}public void setValue(String key, Object value) {vals.put(key, value);}public Object getValue(String key) {Object val = vals.get(key);if (val == null)return "";elsereturn val;}public int getKeyNum() {return vals.size();}
}
三、在java中封装所需要打印的参数数据(ps:详情见第六步代码)
四、在需要打印的报表中新建数据接收参数
- parameters -> add
- list集合参数需要注意下参数类型,这里需要把 Parameter Class 设置为 net.sf.jasperreports.engine.JRDataSource 类型。(ps:下拉框中没有的话直接复制上述类型粘贴到它下拉框中)
五、刚刚新建接收的list数据还无法直接在当前输出,我们还需要新建一个子报表,通过它来输出list内容
- 窗口 -> 打开组件面板 -> subreport 拉取它到相应位置
- 设置子报表Parameters 为装list的参数
- 去往子报表中 field 添加list集合中的属性
- 然后把添加的 field 拖到 Detail Brand中就能显示了
六、查看成果
public static void main(String args[]) {try {// 获取源文件String path = "C:\\Users\\25109\\Desktop\\ \\iReportModel\\销售合同报表√\\javabean\\testBean.jasper";TestModel testModel = new TestModel();testModel.setProvice("湖南");testModel.setCity("长沙");TestModel testModel2 = new TestModel();testModel2.setProvice("湖南");testModel2.setCity("株洲");TestModel testModel3 = new TestModel();testModel3.setProvice("湖北");testModel3.setCity("武汉");List<TestModel> testModelList = new ArrayList<>(); //需要打印的list数据testModelList.add(testModel);testModelList.add(testModel2);testModelList.add(testModel3);HashMap<String, Object> map = new HashMap<String, Object>();List<PrintRecord> printRecordList = new ArrayList<>(); // 封装后的数据集合for (TestModel p : testModelList) {PrintRecord pr = new PrintRecord();pr.setValue("provice",p.getProvice()); // 子报表需要建立对应的fieldpr.setValue("city",p.getCity());printRecordList.add(pr);}map.put("data",new GenericDataSource(printRecordList)); // 主报表需要建立名为data的 Parametersmap.put("staticParam","静态参数");JasperPrint jasperPrint = JasperFillManager.fillReport(path, map, new JREmptyDataSource());if(jasperPrint != null && jasperPrint.getPages().size() > 0){JasperViewer jasperViewer = new JasperViewer(jasperPrint,false); //以视图方式进行预览jasperViewer.setVisible(true);jasperViewer.setAlwaysOnTop(true);jasperViewer.getGraphicsConfiguration().getDevice().setFullScreenWindow(jasperViewer);}else {System.err.println("报表内容为空暂不输出");}}catch (Exception e){System.err.println(e.getMessage());e.printStackTrace();}}
点击下载本案例
ireport 使用list数据源相关推荐
- ireport5.6+jasperreport6.3开发(四)--以javabean为基准的报表开发(ireport)
javabean完成以后就是添加ireport的报表了 打开ireport的option然后在classpath中添加路径. 然后在ireport中追加数据源如图,点击图标后会出现数据源列表然后按ne ...
- iReport制作报表
文章将会涉及3个方面的内容: 第一部分:使用iReport制作报表的详细过程(Windows环境下) 第二部分:使用Jasperreport作为报表控件开发胖客户端报表应用 第三部分:使用Jasper ...
- 第一部分:使用iReport制作报表的详细过程(Windows环境下)
第一部分:使用iReport制作报表的详细过程(Windows环境下) 提示:在有些板块,文中的图片看不到,建议到我的blog浏览文章:http://blog.csdn.net/jemlee2002/ ...
- ireport中文手册3.7版(无图)
目录 Giulio Toffoli 1 1 序言... 6 什么是iReport?. 6 功能特点:... 7 iReport 社区:... 7 鸣谢:... 8 2 入门... 8 必要条件:... ...
- iReport 设计介绍
iReport是一个能够创建复杂报表的开源项目.它100%使用Java语言编写.是目前全球最为流行的开源报表设计器. 由于它丰富的图形界面,你能够很快的创建出任何一种你想要的报表. 以下是iRepor ...
- jasperreport开发手册--ireport教程
转自: https://blog.csdn.net/frankaqi/article/details/50203877 iReport http://www.jasperreport.net 一 ...
- iReport 无数据源格式报表
报表这个恶心玩意,做了一次真心不想再做第二次. 之所以选择无数据源的格式来写报表,主要原因是因为业务太复杂,写sql太麻烦(其实不写sql这种方式也他么也不简单,但是对比写sql来说逻辑上更容易实现一 ...
- ireport参数传递json_iReport 使用json 数据源
前面几番折腾,已经安装好了iReport并且可以正常启动,这里面用的是5.6.0版本,现在记录下使用json作为数据源的操作步骤.这个图文教程超级详细,是__馋猫原创真的是原创 一.首先,创建json ...
- ireport参数传递json_ssm中iReport报表使用json数据源过程体会
前言:做这个一定要有耐心,因为报表本就是数据杂糅到规整的过程,这篇心得会细讲每一步操作,如果只想着一眼到位,建议close tab 在公司中遇到项目,大概是一个这样的需求,有一个列表和一个标题,需要把 ...
- java使用ireport生成报表_JasperReport(3)——Java简单使用IReport生成的文件建立报表...
先看看设计的报表样式: reportTitle是新添加的一个参数,而其他的id和name是通过数据源得到的Filed.IReport在设置参数的时候需要先在左边新建一个parameter,然后再把该p ...
最新文章
- TensorFlow中的对象检测教程:实时对象检测
- PHP语言 -- 数组
- 初识Mysql(part5)--我需要知道的11条Mysql语句之过滤
- 【翻译】使用Ext JS设计响应式应用程序
- RobotFramework自动化测试框架的基础关键字(五)
- thinkphp仿百度文库网站源码
- 源码网络-推荐精品×××站
- 混淆Android JAR包的方法
- 百练OJ:2799浮点数格式
- 【node进阶】深入浅出前后端身份验证(上)---session
- 数仓搭建 DWT 层
- 单击即可提高游戏速度:什么是可调整大小的BAR?
- NYOJ 237 NYOJ 239 二分图 最大匹配模板题 游戏高手的烦恼 月老的难题 两个题一样
- Oracle中的索引
- MicrosoftExcel函数
- Dilworth定理是个啥东东
- 数据安全三要素:机密性、完整性、身份验证
- 南京计算机学校李鑫,南京邮电大学李鑫等:一种基于参数扰动的芯片成品率双目标优化框架...
- JavaScript原型的作用
- 产业园区的10种主要招商渠道
热门文章
- 【历史上的今天】6 月 1 日:Napster 成立;MS-DOS 原作者出生;谷歌出售 Google SketchUp
- 申请CSDN博客专家认证成功
- 有哪些VPS云主机值得学生选择?
- 【全自动网盘扩容软件使用教程】百度网盘自助无限扩容+自助无限修复软件使用步骤说明
- VMware通过vmdk安装Kali linux
- Alien Skin Exposure X4 Bundle 4.5.3.66 特别版 Mac 模拟胶片效果调色滤镜
- 深入理解计算机系统(第三版)家庭作业 第九章
- java-家庭作业3
- ubuntu18.04装N卡驱动后无法开机或关机的解决方法
- 书单(三)-从小到大课外阅读书籍顺序