在插件开发中,某些时候需要对结果报表做一些操作,以实现自定义的展示需求。
我们以分页预览为例,首先来看一下分页预览从发起请求到最后响应给浏览器端展示HTML的过程。

可以看到结果报表是在PageActor(预览执行方式Actor接口的实现类)之后产生的,如果我们需要修改结果报表的话,那么久可以继承PageActor,重写这个类生成结果报表的方法。
/**
* 从缓存中读取结果报表(如果有缓存)
*
* @param tpl 报表薄
* @param tplPath 报表路径
* @param reportCache 用于缓存报表的对象
* @param parameterMap 参数集
* @return 结果报表薄
*/
public ResultWorkBook getResultBookFromCacheIfNeed(TemplateWorkBook tpl, String tplPath,
ReportCache reportCache,
Map parameterMap, int sheetIndex); |
/** * 生成报表薄跨sheet计算器 * * @param workBook 报表薄 * @param parameterMap 参数集 * @return 跨sheet计算器 */ public WorkBookExecutor createWorkBookExecutor(WorkBook workBook, Map parameterMap); |
一般来说,只需要重载getResultBookFromCacheIfNeed方法就可以实现修改结果报表的目的了。
@Override
public ResultWorkBook getResultBookFromCacheIfNeed(TemplateWorkBook tpl, String tplPath, ReportCache reportCache, Map parameterMap, int sheetIndex) {
ResultWorkBook wb = super.getResultBookFromCacheIfNeed(tpl, tplPath, reportCache, parameterMap, sheetIndex);
doModify(wb);
return wb;
} |