如何基于报表工具FineReport进行二次开发

随着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

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

时间: 2024-08-07 08:36:49

如何基于报表工具FineReport进行二次开发的相关文章

Web报表工具FineReport的JS API开发(二)

上次介绍FineReport的JS API中的第一类开发--FR,这次就来介绍一下FS和contentWindow类的开发. 1 FS FS是数据决策系统中的js接口,比如说FS.tabPane.addItem,先介绍几类操作: 1.1 FS.Trans.signOut() 退出决策平台系统 1.2 FS.tabPane._doCloseTab(FS.tabPane._getSelectedTab()) 关闭当前决策平台的标签 1.3 FS.tabPane.addItem({title:"bai

Web报表工具FineReport的JS API开发(一)

很多报表软件可以利用JS接口来实现更多更复杂的功能.以FineReport为例,开放了大量的JS API给用户,根据执行JS的主体不同可以将分为三大类:FR.FS和contentWindow. 在js语句中执行可以使用FR的方法或者属性,比如说FR.Msg.alert,FR中的方法比如引入finereport.js.FS的方法可以用于数据决策系统中的js接口,比如说FS.tabPane.addItem.而contentWindow是在web页面集成的时候,将F报表嵌入在iframe中,调用报表对

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

之前分别列出来了finereport常用的文本.时间函数的解释,这里应广大朋友的要求,整理了finereport最常用到的一些函数! SUM SUM(number1,number2,-):求一个指定单元格区域中所有数字之和. Number1,number2,-:1到30个参数或指定单元格区域中所有数字. 备注: 函数将直接键入参数中的数值.逻辑值及文本表达式计算在内. 若参数是数组或引用,则只对数组或单元格引用的数值进行计算. 示例: SUM(70,80)等于150. SUM("70"

基于PHP实战ThinkSNS V3二次开发

基于PHP实战ThinkSNS V3二次开发(系统架构.网站定制化开发.问答系统开发) 课程分类:PHP 适合人群:中级 课时数量:25课时 服务类型:C类(普通服务类课程) 用到技术:PHP.ThinkSNS V3二次开发 涉及项目:ThinkSNS V3二次开发.问答系统 咨询QQ:1840215592 课程内容简介: 由于ThinkSNS产品提供了完整的微博及系统功能,并提供了非常友好的二次开发规范.越多越多的企业和开发人员选择使用ThinkSNS构建成熟的SNS企业网站和商业项目.本课程

Web报表工具FineReport二次开发JS之字符串

在报表开发过程中,有些需求可能无法通过现有的功能来实现.须要开发者二次开发,以FineReport为例.能够使用网页脚本.API接口等进行深入的开发与控制. 考虑到JS脚本开发的使用较多.这里先先简介怎样用JS对字符串进行操作.比方怎样推断字符串是否为空,字符串的长度,替换.查找,截取,或者将字符串转换为其它类型等. 1. 字符串的长度 1.1 返回字符串长度 获取字符串长度.能够使用字符串对象的length属性. 比如: var txt= "Hello FR"; txt.length

Web报表工具FineReport的JS开发之字符串

在报表开发过程中,有些需求可能无法通过现有的功能来实现,需要开发人员二次开发,以FineReport为例,可以使用网页脚本.API接口等进行深入的开发与控制. 考虑到JS脚本开发的使用较多,这里先先简单介绍如何用JS对字符串进行操作,比如如何判断字符串是否为空,字符串的长度,替换,查找,截取,或者将字符串转换为其他类型等. 1. 字符串的长度 1.1 返回字符串长度 获取字符串长度,可以使用字符串对象的length属性.例如: var txt= "Hello FR";    txt.l

Web报表工具FineReport中JavaScript的使用

报表软件FineReport采用的是jQuery v1.9.2框架,jQuery是一个快速的,简洁的JavaScript库,能让用户更方便地处理HTML documents.events,实现动画效果,方便地为网站提供AJAX交互,并且它兼容各种浏览器(IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+).FineReport报表解析后最终成为一个html页面,因此可以使用JS对报表进行各种处理,可以选择使用jQuery框架的所有方法对报表进行操作.在此基础上,F

基于Java的Arc Engine二次开发的环境的配置

1.软件准备 ArcGIS for Desktop 10.2, Arc engine, jdk-7u60-windows-i586,Eclipse Mar2 2.软件的安装 2.1 ArcGIS for Desktop 10.2的安装 软件的下载:ArcGIS for Desktop 10.3全套的下载:http://pan.baidu.com/s/1o7F4yue,附带破解方法 本文使用的是10.2,其下载路径与安装破解方法如:http://jingyan.baidu.com/article/

如何利用报表工具FineReport实现报表列的动态展示

相信动态列的实现困扰了很多人,大数据量,多字段的加载将会非常耗时,数据又做不到真正的动态灵活.现有的方式都是通过变向的隐藏等方式来实现. 那该如何解决呢?这里分享帆软报表设计器FineReport的实现方案,结合实际工作中遇到的的相关内容. 我本地常用数据库是MYSQL,所以比较了解一点,所以实现方式也是基于mysql的.首先了解一下MySQL自带的information_schema数据库使用. 大家在安装或使用MYSQL时,会发现除了自己安装的数据库以外,还有一个 information_s