历史版本7 :自定义函数Unicode编码转化为中文 返回文档
编辑时间:
内容长度:图片数:目录数:
修改原因:
1.描述编辑
数据库中保存的是如下形式的编码:%u5357%u4EAC-%u57CE%u5317希望最后展示出来的是对应的中文“南京-城北”
FineReport提供了自定义函数机制,可以由用户根据业务需要自己来定义一些函数,但这些函数必须满足FineReport函数定义规则。
2. 函数原理编辑
在FineReport中,每一个函数都被定义成一个类,这个类必须要实现Function这个接口,在运算的时候首先通过函数名反射取得这个类,然后调用它的run(Object[] agrs)方法。下面Ubm这个函数可以实现:
3. 实现步骤编辑
3.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();
}
}
3.2 编译自定义函数
将编译后的Ubm.class放到FineReport的安装目录WEB-INF下面的classes目录下,因为Ubm.java属于包com.fr.function,所以Ubm.class需要放到%FR_HOME%\WebReport\WEB-INF\classes\com\fr\function目录下。
3.3 注册自定义函数
生成该函数的类后需要在设计器中进行注册,才可以使用该函数。打开服务器|函数管理器选择刚刚定义好了Ubm类,如下图
![222 222](/uploads/201610/14766699759tMiPQg7.png)
3.4 使用自定义函数
注册好自定义函数后,制作报表时便可直接使用了,使用方法与内置的函数是相同的。输入公式=Ubm("%u5357%u4EAC-%u57CE%u5317")运行如下:
![222 222](/uploads/201610/1476669905odt4OShr.png)