小编最近接的项目是有关报表开发的,很想把这部分知识分享出来。希望大家能够支持我!不多说,马上进入我们今天的话题。

API基本知识

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

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

由于每个部分各自包含了很多属性,比如可以设置单元格的前景、背景、边框、字体、字号等;又比如每个WorkSheet中可以添加,删除单元格、可以设置每个sheet的页面属性、可以给每个sheet中添加图表悬浮元素等;再比如可以对WorkBook进行执行获得结果并导出成各种格式、可以进行打印、添加工具栏等等。下图为FineReport所有开放的API,我们今后都会用到。

简单程序数据集

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

1. 问题描述

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的总行数

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使用程序数据集
配置好程序数据源后便可以使用定义的程序数据集了,与其他类型的数据集使用方法是相同的,可以通过拖拽方法实现单元格数据列绑定。如下图:

今天就讲到这啦,是不是很不好懂,小编在做着项目之前没接触过报表开发也是费了一番功夫。大家继续关注哦!

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

  1. 报表引擎API开发入门— EJB程序数据源

    2019独角兽企业重金招聘Python工程师标准>>> 我们前面讲了几个数据源,今天我们来讲一下EJB数据源,这篇讲完我们数据源这部分就讲完了.数据连接不需要直接访问数据库,而是使用 ...

  2. 报表引擎API开发入门—带参程序数据集

    http://blog.csdn.net/yuanziok/article/details/47998489

  3. 利用WordPress REST API 开发微信小程序从入门到放弃

    自从我发布并开源WordPress版微信小程序以来,很多WordPress网站的站长问有关程序开发的问题,其实在文章:<用微信小程序连接WordPress网站>讲述过一些基本的要点,不过仍 ...

  4. 驰骋工作流引擎-API开发接口-重要的部分.

    驰骋工作流引擎-API开发接口-重要的部分. - 多看文档,少走弯路,学会使用ccbpm的api接口,让您的sdk表模式开发无忧. 登录与门户API 首先要进行代码集成与组织机构的集成 其次在自己的系 ...

  5. 十三、BIRT报表引擎API及报表API

    13.1报表引擎详解,API结构 BIRT包含几个引擎.一个引擎是一个提供一个特定领域的功能的一套Java API.例如,数据引擎包含管理数据的API,图表引擎包含生成一个图表的API.一般而言,BI ...

  6. 安卓开发入门小程序!一个本科渣渣是怎么逆袭从咸鱼到Offer收割机的?灵魂拷问

    开头 1.一定要把基本的数据结构,经典的算法,Unix编程,程序编译链接及计算机原理等基础知识扎牢,这些会长远影响你的职业发展. 2. 推荐从C语言入门,不单是因为很多操作系统.网络协议栈开源代码由C ...

  7. 利用百度地图天气API开发微信小程序

    2020.11.24更新: 更换了天气数据源,增加了小时预报和未来6天预报. 2020.11.19更新: 由于百度的API一直有问题,所以修改了初始进入后的定位方法. 2020.11.05更新: 最近 ...

  8. php api开发书籍,概述 · ThinkPHP API开发入门 · 看云

    [![邀请链接](https://img.kancloud.cn/bd/9e/bd9ee1bb6c29f7cad10b6e069b1907da_728x90.jpg)](https://www.kan ...

  9. 常用的Java流程引擎API开发调用接口大全-工作流引擎设计

    关键词: 工作流引擎 BPM系统 接口调用 工作流快速开发平台  工作流流设计  业务流程管理   asp.net 开源工作流 一.程序调用开发接口  二.   接口说明 所谓的驰骋工作流引擎的接口, ...

最新文章

  1. strstr函数头文件_C语言(函数)学习之strstr strcasestr
  2. php 對象轉換成數組,PHP錯誤:陣列對象轉換成關聯數組
  3. 转]网络上收集的Visual Studio 2008的一些小技巧
  4. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何获取标准驱动器扭矩值获取电流值
  5. x3m文件怎么转换成mp3_视频中的音频怎么单独提取出来转换成mp3格式
  6. Python 标准库 urllib2 的使用细节
  7. 矩阵快速幂 学习笔记
  8. linux使用触摸屏驱动程序,Linux触摸屏驱动
  9. Qt介绍---QPA(Qt Platform Abstraction)
  10. 树莓派上3g模块的使用
  11. 2019年MongoDB中文社区 长沙大会
  12. 三星S8 隐藏Android功能键,三星S8获系统更新 新增虚拟按键隐藏功能
  13. 新研博美反式环辛烯-三乙二醇-氨基,TCO-PEG3-Amine可用于在活化剂(如EDC或DCC)或活化酯(如NHS酯)存在下通过稳定的酰胺键衍生羧基
  14. Checkout和Rest的所有谜题(git reset --files是要改一下)
  15. php+扫描条码,PHP条形码图像生成器
  16. 用阿里云托管服务器怎么托管_云托管就像圣诞老人的4种方式
  17. 视频教程-OpenGLES(iOS2018版)-其他
  18. 03-Netty中的Future接口
  19. Docker构建Mycat
  20. 数据仓库DM、DW和ODS等概念区分

热门文章

  1. ssis组件_SSIS脚本组件概述
  2. sql server 部署_将程序包部署到SQL Server集成服务目录(SSISDB)
  3. 如何自动维护全文索引和目录
  4. app自动化问题点整理
  5. vue-cli watch简单用法
  6. 标准C程序设计七---120
  7. 项目里面遇到的问题和解决方案的记录
  8. java 导出文件上传模板,上传Excel文件批量导入数据
  9. codeforces 1220E
  10. 内置函数filter()