报表中需要字体高亮、书签和url跳转的功能,easypoi的word模板导出不能友好支持上面的功能,最后使用了freemarker的html模板导出word。首先用word编写报表要显示的内容格式,动态显示内容用${变量名}替换,循环使用#list遍历数据。模板编写好后另存为html文件。生成的html就是要导出word报表的模板。通过TemplateLoader加载html模板,传入报表数据和输出文件路径,调用template.process方法生成word。
报表中涉及到图表导出,利用java的jfreechart类库生成图表。利用jfreechart可以生成饼图、柱状图、散点图、折线图等多种图表,结合pdf生成图形报表。利用itext+freemarker+jfreechart生成pdf报表,可以很好的实现客户需要的报表格式和展示的内容。日报的数据来源通过媒体、微信、微博第三方数据接口,通过租户项目中的品牌关键词和es中的concent和title进行模糊匹配查出数据。每个租户中所有项目中的品牌词生成对应的报表,通过fegin调用用户中心的接口查出要生成的数据集。
该方法由定时任务启动,定时任务使用ElasticJob分布式任务,每天晚上1点触发,调用生成日报的方法dailyBuild()。日前生成日报的格式支持word,ecxel。再后继的开发中会加入pdf格式的报表,结合jfreechart生成带有图表数据和表格数据的报表,使用定时任务每天晚上凌晨1点生成租户前一天的日报,数据来源包括媒体、微信、微博,早上9点定时发送给用户。