Java纯后端生成PDF格式报表的三种方案(包含echarts图表)
最近做了一個奇葩的需求,研究了一下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文件。
流程和原理:
之前為了調試網頁寫了一個Java桌面應用來調用wkhtmltopdf工具生成pdf。
github地址:https://github.com/WrathLi/html2pdf
缺點:
優點:
界面美觀,因為是直接截取html網頁,所以和前端生成的圖表樣式一樣。
開發量最小。
最終效果:
總結
以上是生活随笔為你收集整理的Java纯后端生成PDF格式报表的三种方案(包含echarts图表)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手把手教你如何创造睡后收入
- 下一篇: 送给女朋友的java程序_逗女朋友开心的