图片在下文字在上

编辑
文档创建者:印然 (67260 )     浏览次数:2760次     编辑次数:12次     最近更新:jiangsr 于 2018-09-19     

目录:

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.base.GraphHelper; import com.fr.data.core.db.BinaryObject; import com.fr.log.FineLoggerFactory; import com.fr.script.AbstractFunction; import com.fr.stable.CoreGraphHelper; import javax.imageio.ImageIO; import java.awt.Graphics2D; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.IOException; /** * 图片在下文字在上 */ public class StringImage extends AbstractFunction { @Override public Object run(Object[] args) { Image result = null; int p = 0; Object[] ob = new Object[2]; for (int i = 0; (i < args.length && p <= 1); i++) { if (args[i] == null) { continue; } ob[p] = args[i]; p++; } if (ob[1] instanceof BinaryObject) { BinaryObject binaryObject = (BinaryObject) ob[1]; try { result = initStringImage((String) ob[0], ImageIO.read(binaryObject.getInputStream())); } catch (IOException e) { e.printStackTrace(); } } else if (ob[1] instanceof Image) { result = initStringImage((String) ob[0], (Image) ob[1]); } else { FineLoggerFactory.getLogger().warn("Unsupported type of " + ob[1].getClass()); } return result; } private Image initStringImage(String name, Image image) { BufferedImage splashBuffedImage = CoreGraphHelper.toBufferedImage(image); Graphics2D splashG2d = splashBuffedImage.createGraphics(); double centerX = 25; double centerY = 25; GraphHelper.drawString(splashG2d, name, centerX, centerY); return splashBuffedImage; } }
3.2 编译自定义函数
将编译后的StringImage.class放到FineReport的安装目录WEB-INF下面的classes目录下,因为StringImage.java属于包com.fr.function,所以StringImage.class需要放到classes\com\fr\function目录下。
3.3 注册自定义函数
生成该函数的类后需要在设计器中进行注册,才可以使用该函数。打开服务器>函数管理器,选择刚刚定义好了StringImage类,如下图:
222

函数名称可以自定义,同时可以添加该函数的使用说明,如上图所示的描述。
3.4 使用自定义函数

注册好自定义函数后,制作报表时便可直接使用了,在A1单元格拖入图片字段,选择高级>自定义显示>值里面输入公式StringImage(字符串B,图片A),例如:StringImage("中国",$$$),保存模板预览就可以实现图片在下文字在上的效果了。

注:内置的sqlite不支持显示图片。

附件列表


主题: 二次开发
如果您认为本文档还有待完善,请编辑

文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

此页面有帮助吗?只是浏览 [ 去社区提问 ]