Java纯后端⽣成PDF格式报表的三种⽅案(包含echarts图
表)
jsp用什么前端框架最近做了⼀个奇葩的需求,研究了⼀下Java纯后端⽣成PDF报表的⽅案,顺便将研究的⽅案做个总结复盘,分享⼀下。
需求分析:Java后端定时任务统计汇总成报表数据,并⽣成PDF格式的报表⽂件,并通过邮件、企业等发送给指定接收⼈。报表界⾯包含动态⽂字说明、折线图、饼图、条形图等图表,界⾯效果和前端⽣成的界⾯相同。
功能难点:前端要⽣成样式好看的图表⽐较简单,像Echarts这些前端⼯具都有现成的功能来完成。但是现在的需求是后端定时任务⽣成报表⽂件,报表界⾯的渲染都必须有后端来完成,由于缺少前端的⽤户操作动作,也⽆法在前端⽣成图表的图⽚后传到后端来。
⽅案⼀:
使⽤FreeMarker+iText⽣成PDF⽂件。
原理和流程:
FreeMarker是⼀款模板引擎: 即⼀种基于模板和要改变的数据, 并⽤来⽣成输出⽂本(HTML⽹页、电⼦邮件、配置⽂件、源代码等)的通⽤⼯具。
iText是⼀种⽣成PDF报表的Java组件。通过在服务器端使⽤Jsp或JavaBean⽣成PDF报表,客户端采⽤超链接显⽰或下载得到⽣成的报表,这样就很好的解决了B/S系统的报表处理问题。
具体的流程如下:
缺点:这种⽅案只能⽣成很简单的Table模板,由于iText对html的要求⾮常严格,太复杂的界⾯会报错,所以⽆法⽣成Echarts的图表。
⽅案⼆:
SwingUI+JFreeChart+JFreePDF⽣成PDF⽂件
这⾥JFreeChart和JFreePDF都是maven依赖包
JFreeChart是Java客户端应⽤的⼀个界⾯组件,在SwingUI上画出图表控件。
JFreePDF是能将JPanel⾯板截屏⽣成PDF的插件。
流程和原理:
缺点:
由于是将JPanel截屏⽣成的PDF。所以界⾯样式上⽐较难看,⽐不上前端界⾯⽣成的报表页⾯。
⽽且JFreePDF这个maven依赖的插件是基于JDK11开发的,如果要兼容JDK8,就要到github上将源码下载下来,⾃⼰编译⽣成⼀个兼容JDK8的依赖包。
⽅案三:(最终采⽤⽅案)
使⽤wkhtmltopdf+静态html界⾯⽣成pdf界⾯
wkhtmltopdf是⼀个将静态html⽹页截屏⽣成pdf⽂件的⼯具,Linux、Mac、Windows各个操作系统的版本都有。只需要输⼊⽬标⽹页的URL就能将⽹页完成的导出PDF⽂件。
流程和原理:
1. 在操作系统安装wkhtmltopdf⼯具
2. 前端编码html+jquery+echarts的纯静态页⾯,由于wkhtmltopdf⼯具使⽤内置的WebKit内核版本较低,所以不兼容太新的js语
⾔,像VueJS这些最新的框架就⽆法使⽤这个⼯具。⽬前测试的能够兼容的echarts版本是4.2.1.
3. 调⽤wkhtmltopdf命令输⼊静态⽹页地址⽣成pdf⽂件。
之前为了调试⽹页写了⼀个Java桌⾯应⽤来调⽤wkhtmltopdf⼯具⽣成pdf。
缺点:
1. 需要在服务器系统中先安装wkhtmltopdf⼯具;
2. 只能单独开发⼀个纯静态的html页⾯来⽣成报表
优点:
界⾯美观,因为是直接截取html⽹页,所以和前端⽣成的图表样式⼀样。
开发量最⼩。
最终效果:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论