背景水印功能说明与开发指引

功能说明

DataViz 提供了背景水印功能以在图表、图册、分析等资源在展现或导出为特定格式文件时,以水印背景形式显示所需的相关信息,以达到记录或展现额外特定信息,保护分析结果被正确使用的作用。

水印效果示例

使用方法

DataViz中提供的默认水印实现会提供访问用户名访问IP访问时间信息的显示。具体配置是在后端 WEB-INF/conf/applicationContext.xml 中,配置一个水印生成类:(默认发布版本中该行已被注释)

<bean class="com.neusoft.saca.dataviz.charting.service.watermark.impl.DefaultWatermarkGenerator"></bean>

默认配置下,显示的信息会以逆时针30度旋转灰色文字白色透明背景等宽16号字体文字加粗2倍行间距间隔平铺铺满显示,这里除最后一项显示方式及背景色,其他样式都可以在配置文件中直接修改:

    <bean
        class="com.neusoft.saca.dataviz.charting.service.watermark.impl.DefaultWatermarkGenerator">
        <property name="rotateDegree" value="-40.0"></property>
        <property name="font">
            <bean class="java.awt.Font">
                <constructor-arg index="0" value="Helvetica" />
                <constructor-arg index="1" value="1" />
                <constructor-arg index="2" value="16" />
            </bean>
        </property>
        <property name="fgColor">
            <bean class="java.awt.Color">
                <constructor-arg index="0" type="int" value="0" />
                <constructor-arg index="1" type="int" value="0" />
                <constructor-arg index="2" type="int" value="225" />
            </bean>
        </property>
        <property name="leadingFactor" value="1.5"/>
    </bean>

以上配置中,修改了旋转角度为逆时针旋转40度,字体为16号Helvetica字体、加粗,文字颜色为蓝色(RGB 0, 0, 225),行间距为1.5倍间距。

开发指引

当需水印显示的内容或样式配置不能满足要求时,可以通过二次开发接口进行扩展修改。开发所需的接口或实现类位于 dataviz-charting.jar。

简单内容修改

简单的内容修改可以自定义开发一个实现类,替代默认的 DefaultWatermarkGenerator bean替换到 applicationContext.xml中。代码实现可以简单地继承DefaultWatermarkGenerator,重写其中的一个方法:

protected List<String> getTexts(WatermarkContext context) {
    ...
}

该方法的输入是一个WatermarkContext,一个包含了当前信息的对象,返回值是若干行文字。

WatermarkContext 是一个Map容器,可以调用其 get() 方法,从中获取当前用户等相关信息:

package com.neusoft.saca.dataviz.charting.service.watermark;

public class WatermarkContext {
    public static final String KEY_USER_ID = "userId";

    public static final String KEY_TIMESTAMP = "timestamp";

    public static final String KEY_USER_IP = "userIp";

    public static final String KEY_VIEW_TYPE = "viewType";

    public <T> T get(String key);

    public void put(String key, Object value);
}

其中,viewType是当前的查看方式,包含html、pdf、print等。

其他修改

如果需要的水印通过样式配置和简单的重写无法满足,则需要实现完整的水印生成接口(或抽象类),并在 applicationContext.xml 中替换 defaultWatermarkGenerator bean。

水印生成顶层接口

顶层接口是DataViz中调用水印时使用的接口,通常实现时可以直接使用下层抽象类简化实现。

public interface WatermarkGenerator {

    public static final int POSITION_TILE = 1;

    public static final int POSITION_CENTER = 2;

    public static final int POSITION_ZOOM = 3;

    public WatermarkRawImage getWatermarkRawImage(WatermarkContext context, Dimension size);

    public WatermarkImageStream getWatermarkImageStream(WatermarkContext context, Dimension size);

    public int getPosition(WatermarkContext context, Dimension size);

}

水印生成抽象类

可以直接继承系统中的 com.neusoft.saca.dataviz.charting.service.watermark.impl.AbstractWatermarkGenerator 实现自定义的水印现实效果,需要实现如下2个方法:

    /**
     * 获取水印图像
     * 
     * @param context
     * @param size
     * @return
     */
    protected abstract ConvertableWatermarkImage getWatermarkImage(WatermarkContext context, Dimension size);

    /**
     * 生成图片所需的摆放方式,见 POSITION 常量。
     * 
     * @param context
     * @param size
     * @return
     */
    public int getPosition(WatermarkContext context, Dimension size);

其中,WatermarkContext 参见前文介绍,Dimension包含一个宽度和一个高度,它是在导出时文档中的尺寸,可供实现时参考,在展现时该值为null

ConvertableWatermarkImage

ConvertableWatermarkImage 是水印图像结果的封装,包含2个构造方法,对应不同的图片获取方式:

public ConvertableWatermarkImage(BufferedImage image)

public ConvertableWatermarkImage(InputStream in, String type)

第一种方式传入一个 java.awt.image.BufferedImage 对象,较适用与JVM内存中动态生成图片的场景;第二种方式传入一个输入流和类型,输入流是一个图像文件流,type指定其格式(建议使用 png 或 jpg),较使用于从其他方式获取图像场景。

results matching ""

    No results matching ""

    results matching ""

      No results matching ""