当前位置: 首页 > 图灵资讯 > 技术篇> java利用chrome --headless生成PDF报表文件

java利用chrome --headless生成PDF报表文件

来源:图灵教育
时间:2023-07-05 17:39:42

1.背景

项目需求需要做PDF报告,产品经理要求不能太丑,因为它是PDF,必须要求除了文本表,还有折叠图、蛋糕图、柱图、玫瑰图、各种花哨的图片,因为做比其他制造商好,也支持定期生成、日报、周报、月报等,也支持定期发送给客户、电子邮件、企业微信等。需求已经过去,产品经理的下一份工作就是盯着程序猿。

java利用chrome --headless生成PDF报表文件_安装包

2.难点和方案

由于需要各种图表样式,用户可以在预览时配置操作样式模板,因此前端工作是必不可少的。前端仍然有许多现成的组件来生成漂亮的图表,如Echarts,但也需要定期生成和发送,因此必须在后端完成。作为java程序员,我们只能为百度编程。我们发现itextt通常是常规的、JFrechart等三方类库可以调用实现,但几个demo发现显示效果不尽如人意,不进入产品经理的眼睛(我只是垃圾java程序员,你要让前端这么好看),然后不能满足动态配置和预览的要求。另外,我想知道如何学习这些三方API。我觉得做复杂的生意很难,学习成本也很高。我太懒了,不想做这些工作。挠了几天头发(剩下的不多了)后,我改变了主意。

方案思路:

既然要动态配置模板,还要边预览边做,那就让前端做好吧,就当正常界面做,随便用户怎么操作,操作后生成模板,后端接口返回数据,前端填充。至于怎么花哨,你前端决定,我是后端,界面不会花哨。关键是如何在数据填充后生成pdf报表?至于发什么都不是问题,只要生成pdf文件,我想怎么发就怎么发,可以发到美国。研究发现,我只需要一个将界面变成PDF文件的工具。这个工具离地平线很远。既然预览的报表界面是通过浏览器看到的,我的整个浏览器可以吗?我可以展示你浏览器能展示的所有东西。如果界面不好看,你可以找到前端。我的后端永远不会携带锅。毕竟,我们可以展示他能展示的东西。

3.实现

生成工具:chrome --headless(如果不知道,自己百度,很多帖子都说得很好)

实现思路:内置一些报告模板或让用户通过界面配置一些报告模板(当然,大问题结构或固定),如显示数据(结合业务),以什么形式显示(各种图表),然后固定报告模板和样式,前后数据格式,前端根据模板样式显示,然后调用后端接口获取具体数据填写显示,根据界面的路由,后端通过chrome --headless将某个路由界面的数据输出到pdf文件中。文件生成成功后,下一步就没什么大问题了。

工具安装:chrome或衍生物(chromium、browser360)

环境一般分为x86(amd64)和arch64(arm64),操作系统也会有一点影响,一般依赖问题,但根据安装信息依次缺乏依赖。目前,由于我已经适应了一些国内环境,所以在一些坑之后,我也适应了一些国内环境现成的安装包,一键安装,成功的个人测试支持如下:

格式:CPU + OS ,其中,aarch64环境是国内服务器环境。统信UOS也适用于昆鹏和飞腾,但之前的安装包忘记了放在哪里,评论可以提供相关帮助

  • x86
  • centos7、kylin10、openeuler下载地址: chrome安装包
  • aarch64 (鲲鹏920 or 飞腾)
  • kylin10(银河麒麟v10)
  • openEuler(欧拉)

下载地址链接: browser360安装包

安装后,调用命令生成PDF:

  • x86环境/opt/google/chrome/chrome --headless --enable-logging --disable-gpu --no-sandbox --acceptSslCerts --acceptInsecureCerts --ignore-certificate-errors --window-size=1920,1080 https://127.0.0.1:80/index.html --print-to-pdf=/data/test.pdf --virtual-time-budget=10000 --print-to-pdf-no-header
  • aarch64环境/opt/browser360/arm64_64k/browser360-cn --headless --enable-logging --disable-gpu --no-sandbox --acceptSslCerts --acceptInsecureCerts --ignore-certificate-errors --window-size=1920,1080 https://127.0.0.1:80/index.html --print-to-pdf=/data/test.pdf --virtual-time-budget=10000 --print-to-pdf-no-header

粗体解释:第一个是安装后的可执行文件位置,第二个是您需要的界面路径,第三个是您当地的文件地址(pdf文件应提前创建)。在browser360安装脚本中制作了软链接,链接地址为/opt/google/chrome/chrome,事实上,如果安装脚本安装在安装包中,只需要第一个命令(x86)。