历史版本10 :图片在下文字在上 返回文档
编辑时间:
内容长度:图片数:目录数:
修改原因:
1. 描述编辑
一个图表字段跟一个普通字段希望显示在一个单元格中,有层次的显示出来。例如A字段存着一个图片,B字段存着一些字符串。先把A字段拖入A1单元格,然后再将B字段也拖入A1单元格,背景是A字段,显示的内容是B字段的值,类似于PPT等层的一个关系,如下图效果动物的图片为背景上层显示另一字段产地的值中国。
2. 实现原理编辑
FineReport可以通过自定义函数来实现,定义两个参数name, image分别接收模板中字段,然后返回一个带name的图片,就实现把文字显示在图片之上了。
3. 实现步骤编辑
3.1 编写自定义函数
定义StringImage这个类代码如下:
package com.fr.function;
import com.fr.script.AbstractFunction;
import com.fr.stable.Primitive;
public class FlagHtmlColor extends AbstractFunction {
public Object run(Object[] args) {
String txt="";
String color="";
String flag="";
if(null==args||args.length==0){
return Primitive.ERROR_NAME;
}else if(args.length==1){
txt=args[0].toString();
color="red";
flag="N";
}else if(args.length==2){
txt=args[0].toString();
color=args[1].toString();
flag="N";
}else{
txt=args[0].toString();
color=args[1].toString();
flag=args[2].toString();
}
String result=getHtmlStr(txt, color, flag);
return result;
}
public String getHtmlStr(String txt,String color,String flag){
String starthtml="<font color='"+color+"'>";
String endhtml="</font>";
StringBuffer sb=new StringBuffer();
int len=txt.length();
if("N".equalsIgnoreCase(flag)){//数字
for(int i=0;i<len;i++){
char c=txt.charAt(i);
if(c>='0'&&c<='9'){
String str=starthtml+c+endhtml;
sb.append(str);
}else{
sb.append(c);
}
}
}else if("C".equalsIgnoreCase(flag)){//字母
for(int i=0;i<len;i++){
char c=txt.charAt(i);
if((c>='a'&&c<='z')||(c>='A'&&c<='Z')){
String str=starthtml+c+endhtml;
sb.append(str);
}else{
sb.append(c);
}
}
} else if("Z".equalsIgnoreCase(flag)){//中文
for(int i=0;i<len;i++){
char c=txt.charAt(i);
if(c >= 0x4E00 && c <= 0x9FA5){
String str=starthtml+c+endhtml;
sb.append(str);
}else{
sb.append(c);
}
}
}else{
return txt;
}
return sb.toString();
}
}
注:最新的代码链接fine-help
3.2 编译自定义函数
将编译后的StringImage.class放到FineReport的安装目录WEB-INF下面的classes目录下,因为StringImage.java属于包com.fr.function,所以StringImage.class需要放到classes\com\fr\function目录下。
3.3 注册自定义函数
生成该函数的类后需要在设计器中进行注册,才可以使用该函数。打开服务器>函数管理器,选择刚刚定义好了StringImage类,如下图:
函数名称可以自定义,同时可以添加该函数的使用说明,如上图所示的描述。
3.4 使用自定义函数
注册好自定义函数后,制作报表时便可直接使用了,在A1单元格拖入图片字段,选择高级>自定义显示>值里面输入公式StringImage(字符串B,图片A),例如:StringImage("中国",$$$),保存模板预览就可以实现图片在下文字在上的效果了。