在帆软报表中如果要显示水印,如果要全部都要显示,只需要到决策系统--安装设置中打开水印开关。如果想要某个报表显示水印,可以在设计器的水印设置中为该报表设置水印。
但是如果碰到这种需求,比如某些人或者某些角色需要显示水印,其他人不显示。或者是预览报表需要显示水印,导出不需要水印,或者显示不需要,导出需要。这时产品的功能就实现不了了。
经过跟踪源码得知,报表渲染的结果类ResultWorkBook中有个WatermarkAttr属性,那么思路就是预览或者导出时将这个属性置空或者加上就能达到目的。
经过分析发现报表预览时,这个属性是在MemXPageWorkBookExecutor类的dealWithExecutedAttr方法中来做的,填报是在WriteWorkBookExecutor类的dealWithExecutedAttr类中实现的。可以通过二开接口ActorProvider来提供自己的Executor类来替换那个方法里的逻辑。
比如:替换逻辑如下
@Override
protected void dealWithExecutedAttr(ResultWorkBook resultWorkBook) {
if (resultWorkBook != null) {
Iterator it2 = th