cafebabex / report-demo

html2word

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

report-demo

html2word 最近公司有这样一个需求: 实现一个通过富文本发布报告模版,内容会包含统计图表数据。发布之后客户可以下载获得word类型的报告。 想到两种方案: 1.通过poi编码实现 2.通过html2word方式实现 个人感觉poi编码太麻烦了,所以选择从html2word的方式入手,网上找到的html2word方式的实现有以下几类 1.html直接改后缀就可以变成doc,而且可读,但是docx不可以, 可以再通过doc转docx,但是html无法转换为可读的docx这个问题尚未解决(附大佬地址:https://www.jb51.net/article/153059.htm) 2.使用docx4j进行html2word (附大佬地址:https://my.oschina.net/noahxiao/blog/386274) 第二种方式个人尝试发现能够达到需求的效果, 遂借鉴使用第二种方式。

整个流程大致是这样的:采用富文本编辑器设置模版html(图表图片可以采用特殊字符占位 例如: [img1])保存到数据库或者nosql -> 后台提供一个查看报告的接口(可添加拦截器或者权限校验,防止数据外泄) -> 当客户发起下载后 后台发起查看报告接口请求,获得报告的html内容,然后通过docx4j 工具转为docx文件 ,导出给客户.

写完后测试后确实能达到需求。但是这里有几个问题及需要注意的地方: 1.如果不需要图表数据近实时的话,可以在富文本模版发布之前先将图表图片预先生成好。不然图表图片生成需要一定的时间开销(这里我采用的是Echarts + phantomjs的方式调用 phantomjs 服务进程去生成图片)。 2.当docx4j将获得到的html内容渲染为word的时候如果存在图表图片内容,他获取请求图片src的地址获取原图片,这里存在时间开销。测试16张70k左右的图片这里转换成功后需要耗时3秒以上。这样对于客户的体验不是很好。目前没有解决这个问题, 如果有哪位大佬解决了,记得告诉我下。

当前使用的环境如下: macos 10.14.3 jdk 1.8 springboot 2.2.7.RELEASE redis

如果能帮到你,请点个赞!

About

html2word


Languages

Language:Java 100.0%