随着FineReport的发展,它提供的设计器和服务器应该能够满足绝大部分的需求,完全实现零编码的软件开发、革命性地加快软件的开发以及提高软件的稳定性。但是需求千变万化,而FineReport本身所具备的功能是报表中比较典型的,一些比较有个性的功能无法实现,那么就需要应用开发人间使用网页脚本、API接口等进行深入的开发,而这一点,FineReport报表工具是支持的,那么如何来实现插件开发呢?

Ant打包

Ant是一个构建工具,它可以帮助我们将项目开发过程中需要完成的各种步骤组织起来,通过一个简易的方式来构建整个项目。其中一些比较典型的任务就是编译java源代码、运行java程序、拷贝文件或目录、将编译完成的类打包等等。具体的使用方法如下:

1、下载安装Ant

到官网上下载最新的Ant,这里下载的是apache-ant-1.9.7-bin.zip

下载完成后进行解压,这里解压到D:\apache-ant

2、配置环境变量

新建环境变量:ANT_HOME:D:\apache-ant

在环境变量PATH的最后面添加一下内容:

;%ANT_HOME%\bin注意前面的分号,如果PATH最后没有分号“;”的话要加上,有的话就可去除

进入cmd命令窗口,在CMD窗口中输入ant -version,敲击回车键,会显示出安装的ANT版本,说明配置成功了

3、简单Ant编译

首先在D:\plugins-git盘下建立一个build.xml文件,内容如下:

<?xmlversion="1.0"?>

<projectname="helloWorld">

<targetname="sayHelloWorld">

<echomessage="Hello,Amigo"/>

</target>

</project>

进入xml文件路径,运行antsayHelloWorld,如下:

4、进行插件打包

l  将源码下载到本地

l  新增FineReport的jar包,将下图的6个jar包拷贝到lib/report文件夹下

l  打开bulid.xml文件,根据实际安装的jdk位置修改jdk路径

l  打开插件,在插件工程目录下执行ant-fbuild.xml jar

将打包好的文件夹打包成.zip文件,这样这个插件就打包完成,可以在设计器上安装了

l  安装插件

安装完成后,如下图:

安装完成后,可以在公式编辑器中的【函数类型】下看到插件函数了,插件函数里有一些常用的函数如下图:

插件开发实例

1、自定义导出插件

默认的报表工具栏中只能设置Excel导出、Word导出以及PDF导出,如下图所示。如果想导出CSV、TXT等文件就比较麻烦,只能利用自定义按钮来实现。

在FineReport V8.0中提供了工具栏按钮的接口,可以通过此接口来开发插件,实现各种工具栏按钮的功能

l  关键接口

// 国际化文件引入接口

com.fr.stable.fun.LocaleFinder

// web端工具栏按钮扩展接口

com.fr.report.fun.ExtensionButtonProvider

// 导出处理扩展接口

com.fr.report.fun.ExportOperateProvider

// 设计器中工具栏设置中工具栏按钮扩展接口

com.fr.design.fun.ToolbarItemProvider

l  插件工程结构

l  实现过程

实现关键的几个接口。主要类如下所示对于的piugin.xml中的部分配置

com.fr.plugin.export.csv.core.CsvExport

com.fr.plugin.export.csv.core.CsvExtensionButton

com.fr.plugin.export.csv.ui.CsvExportToolbarUI

com.fr.plugin.export.csv.CsvLocaleFinder

l  打包插件

在插件目录执行下面的命令,或者直接点击build.bat批处理文件(注意修改JDK路径)

ant -f build.xml jar

安装插件后,在web属性配置界面就可以添加csv导出按钮了,

这个时候在浏览器上预览报表,就可以看到菜单栏上的csv导出按钮,点击就会把当前的报表导出成为csv文件。

2、自定义函数插件开发

在使用FineReport的自定义函数的时候,我们可以通过编译class之后通过函数管理器添加自定义函数,但是这样有如下三个缺点:

1)维护麻烦,每次更新韩式,都需要找到class文件所在的目录之后用新的class文件替换掉

2)自定义函数缺少该函数的使用说明,不知道的人无法正确的使用该函数,提高了沟通成本

3)传播不方便,在一台机器上使用的自定义函数,如果在另外一台机器上也要使用,需要找到需要拷贝的class文件和function.xml文件

为了解决这三个问题,报表工具FineReport中提供了函数定义的接口,可以通过插件来添加自定义函数,具体开发过程如下:

l  关键接口和xml属性

com.fr.stable.fun.FunctionDefineProvider

l  接口属性

配置属性值

描述

class

自定义函数类别

name

函数名

description

函数使用描述

l  使用方法

<FunctionDefineProvider class="com.fr.plugin.function.MyFunction" name="my" description="函数的描述"/>

l  Piugin.xml内容HTML/XML代码

<?xml version="1.0" encoding="UTF-8" standalone="no"?><plugin>

<id>com.fr.plugin.function.collection</id>

<name><![CDATA[自定义函数集合]]></name>

<active>yes</active>

<version>1.1</version>

<env-version>8.0</env-version>

<jartime>2015-09-10</jartime>

<vendor>author</vendor>

<description><![CDATA[自定义函数插件]]></description>

<change-notes><![CDATA[无]]></change-notes>

<extra-core>

<FunctionDefineProvider class="com.fr.plugin.function.MyFunction" name="my" description="拼接两个参数。调用方式:=my(C4, C5)"/>

<FunctionDefineProviderclass="com.fr.plugin.function.YourFunction" name="you"description="我的函数"/>     </extra-core> </plugin>

l  实现内容(拼接两个字符串)

importcom.fr.general.GeneralUtils;

import com.fr.script.AbstractFunction;

import com.fr.stable.ArrayUtils;

import com.fr.stable.Primitive;

public class MyFunction extendsAbstractFunction {

@Override

public Object run(Object[] args) {

if (ArrayUtils.getLength(args) < 2) {

return Primitive.ERROR_VALUE;

}

return GeneralUtils.objectToString(args[0]) +GeneralUtils.objectToString(args[1]);

}

}

l  插件打包和安装

在插件工程目录下执行

ant -f build.xml jar

安装好插件后,会获取到插件安装包,通过设计器安装该插件后,可以在公式编辑器中的“插件函数”项下看到插件函数了

如何基于报表工具FineReport进行二次开发相关推荐

  1. java 报表_市占率第一的Java报表工具 - FineReport报表工具

    作为国产Java报表工具的优秀代表,FineReport报表工具不仅仅在报表设计的简单易用上表现出极大的优势,更在数据分析等复杂报表处理能力和报表管理等报表综合应用上凸显出其报表技术的成熟和领先. 一 ...

  2. java自定义统计报表_用Java报表工具FineReport制作人员统计报表

    阅读提示: 文章中与FineReport软件使用的相关内容,基于软件的V7.0旧版本编写,不代表软件最新的使用方式. FineReport最新版免费试用:https://www.finereport. ...

  3. web报表工具FineReport常用函数的用法总结(日期和时间函数)

    web报表工具FineReport常用函数的用法总结(日期和时间函数) 说明:凡函数中以日期作为参数因子的,其中日期的形式都必须是yy/mm/dd.而且必须用英文环境下双引号(" " ...

  4. web报表工具FineReport最经常用到部分函数详解

    之前分别列出来了finereport常用的文本.时间函数的解释,这里应广大朋友的要求,整理了finereport最常用到的一些函数! SUM SUM(number1,number2,-):求一个指定单 ...

  5. 基于屌丝青年网样式二次开发的WordPress主题:LIiu-One主题

    源码下载:基于屌丝青年网样式二次开发的WordPress主题:LIiu-One主题-小程序文档类资源-CSDN下载 wordpress主题,基于屌丝青年网样式二次开发LIiu-One主题仿屌丝青年网模 ...

  6. Python基于周立功盒子的二次开发的封装和调用

    Python基于周立功盒子的二次开发的封装和调用 一.介绍     前面我们介绍如何拿到官网给的例程并使用起来,但在使用的过程中,我们发现官网给的例子非常的冗长,可读性不好,于是我进行分解和封装,使得 ...

  7. 基于百度编辑器Ueditor的二次开发

    基于百度编辑器Ueditor的二次开发 官网下载 基本配置 简化后端配置,不请求后端配置项 后端接口规范 修改图片上传 说明及修改 新增按钮及弹窗(自定义附件上传) 按钮文案修改 在业务开发的时候,曾 ...

  8. 基于Qt大恒工业相机二次开发demo-C++

    目录 1.新建工程 2.文件及属性配置 2.1文件拷贝 2.2VS项目属性配置 2.2.1包含目录和库目录添加 2.2.2附加依赖项添加 3.添加基于官方mfc代码改写的CGXBitmap类 3.1添 ...

  9. 基于康耐视cognexVisionpro用C#二次开发的多相机视觉对位框架

    基于康耐视cognexVisionpro用C#二次开发的多相机视觉对位框架 支持1:多相机对位逻辑运算,旋转标定坐标关联运算(可供参考学习)可以协助理解做对位贴合项目思路. 支持2:直接连接运动控制卡 ...

最新文章

  1. Flat - Music scores and guitar tabs editor(乐谱编辑器)
  2. 组合数的简单求法(dfs)
  3. 2020ICPC(小米邀请赛2) - Data Structure Problem(线段树+树状数组)
  4. 5分钟带你理解一致性Hash算法
  5. flutter 如何判断在哪个页面_Agora 教程:构建你的第一个 Flutter 视频通话应用
  6. centos crontab环境变量问题
  7. Atitit spring 3.0 3.1 3.2 4.0 4.3 5.0 新特性
  8. java开发系统架构_Java开发:ECP系统J2EE架构开发平台
  9. java动态运行代码并动态执行
  10. 20款网管须知的工具,你知道几个?
  11. 扫描全能王完美版,纸质文件一键识别电子文档
  12. 吴伯凡-认知方法论-原始舒适区=0认知
  13. 递归实现指数型枚举(递归)
  14. 这交互炸了(三):闪屏页是像云一样消失的
  15. gis计算频数_matlab简单区间列频数统计输出
  16. C语言指针 — 函数指针
  17. iOS ReplayKit实时录制屏幕实现方案的细节记录
  18. Raptor入门练习
  19. 黑马程序员--Foundation框架之--NSArray类以及它的子类NSMutableArray类
  20. 触宝发布Q4财报:预期2022实现全年盈利,管理层增持展示信心

热门文章

  1. 如何快速下载github代码
  2. Linux 编程之时间篇:wall time, cpu time 和 timer
  3. 专访英国伯明翰大学教授姚新——计算机科学的发展已同初衷相去甚远 | AI科技评论...
  4. 数据分析方法01对比分析法
  5. 对萨德入韩事件的回顾和思考
  6. php裁剪图片圆角圆形,php生成圆角图片代码
  7. JVM的四种引用:强,软,弱,虚(与gc有关)
  8. 高级(资深)前端工程师招聘
  9. 力扣刷题 - LCP 30. 魔塔游戏
  10. ffmpeg播放器(二)音频解码与播放