报表引擎API开发入门—简单程序数据集

小编最近接的项目是有关报表开发的,很想把这部分知识分享出来。但愿你们可以支持我!很少说,立刻进入咱们今天的话题。java

API基本知识

小编最近项目所作的是关于一个报表软件—FineReport报表开发的一些事,也许有人接触过,知识相通,我今天就把我作的分享出来。
FineReport设计器与服务器不可能知足全部的需求,某些个性化需求可能没法实现。咱们能够深刻的开发与控制API接口。想要了解咱们内核结构及api的使用,首先咱们必须掌握一些基本的概念,下图就是咱们内核的最基本图示。

图是网上找的,有点不清楚,你们放大看哈。

因为每一个部分各自包含了不少属性,好比能够设置单元格的前景、背景、边框、字体、字号等;又好比每一个WorkSheet中能够添加,删除单元格、能够设置每一个sheet的页面属性、能够给每一个sheet中添加图表悬浮元素等;再好比能够对WorkBook进行执行得到结果并导出成各类格式、能够进行打印、添加工具栏等等。下图为FineReport全部开放的API,咱们从此都会用到。
程序员


简单程序数据集

FineReport设计器自己已经提供了数据库数据源、文本数据源、xml数据源等多种数据来源方式,同时程序员还能够经过java程序自行生成数据来源,只须要实现TableData接口即可以了。数据库

1. 问题描述api

FineReport报表的数据来源能够是数据库数据或是文本数据,而且还能够是其它任何类型的数据,由于FineReport是经过AbstractTableData抽象类来读取数据源的,而上述全部的数据来源都继承实现其抽象方法,所以只要实现了AbstractTableData抽象类,也就能够用自定义类型的数据源了(程序数据集),FineReport报表引擎就可以读取定义的数据源做为报表数据源使用。服务器

2.实现原理

AbstractTableData抽象类主要有5个方法,以下:函数

1.获取AbstractTableData的总列数工具

publicintgetColumnCount();

2.获取AbstractTableData中第columnIndex列的列名字体

public String getColumnName(int columnIndex);

3.判断是否存在第rowIndex行,这主要是用于处理超大数据时,彻底遍历全部数据获取总行数至关困难,用这个方法来判断第rowIndex行是否存在,存在则可读取大数据

publicbooleanhasRow(int rowIndex);

4.获取AbstractTableData的总行数this

publicintgetRowCount();

5.获取AbstractTableData中第columnIndex列,第rowIndex行的数据

public Object getValueAt(int rowIndex, int columnIndex);

在某些应用场景中,须要在程序中对数据进行处理后再做为报表的数据源使用。

3.示例

下面咱们定义数据集为以下样式:列为Name,Score,值分别为Alex,15;Helly,22;Bobby,99做为程序数据集。
3.1定义程序数据源
定义一个类,继承AbstractTableData,并实现里面的方法,具体的代码以下:

publicclassArrayTableDataDemoextendsAbstractTableData{
    // 定义程序数据集的列名与数据保存位置
    private String[] columnNames;
    private Object[][] rowData;
    // 实现构建函数,在构建函数中准备数据
    publicArrayTableDataDemo(){
        String[] columnNames = { "Name", "Score" };
        Object[][] datas = { { "Alex", new Integer(15) },
                { "Helly", new Integer(22) }, { "Bobby", new Integer(99) } };
        this.columnNames = columnNames;
        this.rowData = datas;
    }
    // 实现ArrayTableData的其余四个方法,由于AbstractTableData已经实现了hasRow方法
    publicintgetColumnCount(){
        return columnNames.length;
    }
    public String getColumnName(int columnIndex){
        return columnNames[columnIndex];
    }
    publicintgetRowCount(){
        return rowData.length;
    }
    public Object getValueAt(int rowIndex, int columnIndex){
        return rowData[rowIndex][columnIndex];
    }
}

将ArrayTableDataDemo.java编译生成ArrayTableDataDemo.class类。
将生成的类文件拷贝到报表工程/WEB-INF/classes目录下。因为该类是在com. fr.data包中的,所以最终应该将该ArrayTableData.class放在/WEB-INF/classes/com/fr/data下面。此时该程序数据源便定义好了。
3.2配置程序数据源
点击模板数据集下面的加号,选择程序数据集,而后在弹出的程序数据集对话框中,选择对应的class文件,以下图:

3.3使用程序数据集
配置好程序数据源后即可以使用定义的程序数据集了,与其余类型的数据集使用方法是相同的,能够经过拖拽方法实现单元格数据列绑定。以下图:


今天就讲到这啦,是否是很很差懂,小编在作着项目以前没接触过报表开发也是费了一番功夫。你们继续关注哦!

相关文章
相关标签/搜索