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;
    }

    @Override
    public Object getFieldValue(JRField jrField) throws JRException {
        String fieldName = jrField.getName();
        return records.get(index).getValue(fieldName);
    }

    @Override
    public 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 "";
        else
            return val;
    }

    public int getKeyNum() {
        return vals.size();
    }
}

三、在java中封装所需要打印的参数数据(ps:详情见第六步代码)

四、在需要打印的报表中新建数据接收参数

  1. parameters -> add 
  2. list集合参数需要注意下参数类型,这里需要把 Parameter Class 设置为 net.sf.jasperreports.engine.JRDataSource 类型。(ps:下拉框中没有的话直接复制上述类型粘贴到它下拉框中)

五、刚刚新建接收的list数据还无法直接在当前输出,我们还需要新建一个子报表,通过它来输出list内容

  1. 窗口 -> 打开组件面板 -> subreport 拉取它到相应位置
  2. 设置子报表Parameters 为装list的参数
  3. 去往子报表中 field 添加list集合中的属性
  4. 然后把添加的 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()); // 子报表需要建立对应的field
                pr.setValue("city",p.getCity());
                printRecordList.add(pr);
            }
            map.put("data",new GenericDataSource(printRecordList)); // 主报表需要建立名为data的 Parameters
            map.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();
        }
    }

点击下载本案例

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iReport是一款基于Java的报表设计工具,可以用于创建丰富、交互式和可定制的报表。下面是iReport使用教程: 1. 下载并安装iReport:可以在iReport官网(https://community.jaspersoft.com/project/ireport-designer)上下载iReport的安装包。下载完成后,双击安装包并按照提示完成安装。 2. 创建一个新的报表:打开iReport,点击“File”菜单,在下拉菜单中选择“New”,然后选择报表类型。可以选择创建空白报表或者使用向导创建报表。 3. 设计报表:在iReport的设计视图中,可以使用工具栏中的工具创建文本框、图像、表格等元素。在属性面板中可以设置元素的属性,如字体、颜色、边框等。 4. 添加数据源:在iReport中,需要先定义数据源才能在报表中使用数据。可以选择在“Window”菜单中选择“Data Source”来添加数据源,然后设置连接信息。 5. 添加数据字段:在报表设计视图中,可以使用工具栏中的“Fields”工具来添加数据字段。可以选择数据源中的表或者其他数据结构来添加字段。 6. 设计报表布局:在报表设计视图中,可以使用工具栏中的工具来设计报表的布局。可以添加页眉、页脚、组、子报表等元素。 7. 预览报表:在设计报表完成后,可以通过点击工具栏中的“Preview”按钮来预览报表。可以选择不同的输出格式进行预览,如PDF、HTML、Excel等。 8. 导出报表:在预览报表时,可以选择“Export”选项来将报表导出为PDF、HTML、Excel等格式。 以上就是iReport使用教程,希望对你有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值