| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1057 人关注过本帖
标题:关于报表自定义函数的应用
只看楼主 加入收藏
kaqima
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2016-3-15
结帖率:0
收藏
 问题点数:0 回复次数:0 
关于报表自定义函数的应用
很多报表工具都自带大量的函数,在正常情况下足够满足用户的报表制作需求,但是在一些特殊领域,可能需要一些特殊的函数,在这种情况下,报表工具FineReport提供了自定义函数机制,可以由用户根据业务需要自己来定义一些函数,满足用户的自定义需求。但这些函数必须FineReport函数定义规则。以下以两个实际案例来仔细详解。

应用一:生成UPC条形码

FineReport中自带有EAN型编码,但却没有UPC条形码,但是可以通过自定义函数引用第三方包来生成UPC编码的条形码并显示出来。如输入数值12345678912,将会得到以下UPC条形码:
图片附件: 游客没有浏览图片的权限,请 登录注册

具体步骤怎么实现?

1、 编写自定义函数

导入第三方包
在eclipse中导入第三方包(barcode4j-light.jar,可在帆软论坛上下载),barcode4j是一款开源的条形码生成库,能够生成很多种编码的条形码,包括UPC码。自定义函数中可以直接调用该包中现成的方法来生成UPC条形码。

自定义函数类
新建一个类Upc,完整代码如下:
程序代码:
package com.fr.function;

import java.awt.image.BufferedImage;
import org.krysalis.barcode4j.impl.upcean.UPCABean;
import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider;
import org.krysalis.barcode4j.tools.UnitConv;
import com.fr.script.AbstractFunction;

public class Upc extends AbstractFunction {
    public Object run(Object[] args) {
        if (args == null || args.length < 1) {
            return "参数不对,必须有一个参数";
        }
        try {
            // 创建一个UPC编码生成器
            UPCABean bean = new UPCABean();
            // 设置条形码高度,BufferedImage.TYPE_BYTE_BINARY代表常量值12,可直接使用常量值
            final int dpi = Integer.parseInt(args[1].toString());
            bean.setModuleWidth(UnitConv.in2mm(1.0f / dpi));
            bean.doQuietZone(false);
            BitmapCanvasProvider canvas = new BitmapCanvasProvider(dpi,
                    BufferedImage.TYPE_BYTE_BINARY, false, 0);
            // 创建条形码
            bean.generateBarcode(canvas,args[0].toString());
            canvas.finish();
            // 返回图片显示   
            return canvas.getBufferedImage();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return args[0];
    }
}

2、 编译自定义函数

编译Upc.java生成Upc.class文件,拷贝至报表环境目/WebReport/WEB-INF/classes/com/fr/function下;

将第三方包barcode4j-light.jar放在报表环境目录/WebReport/WEB-INF/lib文件夹下。

3、 注册自定义函数

启动设计器,点击服务器|函数管理器,新增函数取名为Upc,选择Upc.class类,如下图:
图片附件: 游客没有浏览图片的权限,请 登录注册

4、 Upc()函数的使用

重启服务器,在报表中使用公式==Upc(num1, num2),num1为需要生成条形码的数值,num2为生成的图片的高度。

如在单元格中输入公式:=Upc(12345678912,100),预览便可以看到条形码了。

应用二:Unicode编码转化为中文

数据库中保存的是如下形式的编码:%u5357%u4EAC-%u57CE%u5317,希望最好展示出来的是对应的中文“南京-城北”。

具体步骤如下:

1、 编写自定义函数
程序代码:
package com.fr.function;  

import com.fr.script.AbstractFunction;  
  
public class Ubm extends AbstractFunction {  
    public Object run(Object[] args) {  
        String str = args[0].toString();  
        String st = "";  
        StringBuffer buffer = new StringBuffer();  
        while (str.length() > 0) {  
            if (str.startsWith("%u")) {  
                st = str.substring(2, 6);  
                char ch = (char) Integer.parseInt(String.valueOf(st), 16);  
                buffer.append(new Character(ch).toString());  
                str = str.substring(6);  
            } else {  
                st = str.substring(0, str.indexOf("%u"));  
                buffer.append(st);  
                str = str.substring(st.length());  
            }  
        }  
        return buffer.toString();  
    }  
}

2、 编译自定义函数

将编译后的Ubm.class放到FineReport的安装目录WEB-INF下面的classes目录下,因为Ubm.java属于包com.fr.function,所以Ubm.class需要放到classes\com\fr\function目录下。

3、 注册自定义函数

生成该函数的类后需要在设计器中进行注册,才可以使用该函数。打开服务器|函数管理器选择刚刚定义好了Ubm类,如下图
图片附件: 游客没有浏览图片的权限,请 登录注册

4、 使用自定义函数

注册号自定义函数后,制作报表时便可直接使用了,使用方法与内置的函数是相同的。输入公式=Ubm("%u5357%u4EAC-%u57CE%u5317")运行如下:
图片附件: 游客没有浏览图片的权限,请 登录注册

展示值为“南京-城北”。
搜索更多相关主题的帖子: 第三方 条形码 领域 用户 制作 
2016-09-13 14:58
快速回复:关于报表自定义函数的应用
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039590 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved