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

1 篇文章 0 订阅
1 篇文章 0 订阅
文章讲述了如何应对产品经理的需求,包括生成带有图表的PDF报表,支持动态配置和预览。提出让前端负责样式和模板配置,后端通过chrome--headless将网页内容转换为PDF,解决了展示效果和动态生成的问题。安装和调用命令示例也一并给出。
摘要由CSDN通过智能技术生成
1.背景

项目需求需要做PDF报表,产品经理要求还不能太难看,既然是PDF嘛,那肯定要求除了文字表格以外,还要有折线图、饼图、柱状图、玫瑰图啥的,各种花里胡哨的图,美其名曰既然要做就要比别的厂商做的好看,还要支持定时生成,日报、周报、月报啥的,还要支持定时发送给客户,邮件、企业微信等。需求已经通过了,接下来产品经理的工作就是盯着苦逼程序猿了。

2.难点与方案

由于要求图表各种样式,并且用户可进行边预览边配置操作样式模板,这样少不了前端的工作,前端要生成好看的图表还是有很多现成的组件的,如Echarts等现成的工具,但是还要求定时生成、发送,那这块肯定要后端来做了。作为一名java程序员,咱也只能面向百度编程,发现常规的一般有iText、JFreeChart等三方类库可以调用实现,但是整了几个demo发现展示效果并不如意、不入产品经理的法眼(我只是个垃圾java程序员,你要整这么好看让前端搞去),然后还不怎么能满足那些动态配置、预览等要求,另外就是要了解学习这些三方API,感觉这玩意做复杂的业务还挺费劲,学习成本又高,我这么懒可不想做这些工作。挠了几天头发后(已经剩的不多了),换了个思路。

方案思路:

既然要就要动态配置模板,还要边预览,那就让前端来搞好了,就当正常界面来做,随便用户怎么操作,操作完后生成模板,后端接口返回数据,前端来填充就好了,至于怎么个花里胡哨,你们前端来定,我是后端,咱也不会界面的花里胡哨。关键点就是数据填充好后,怎么生成pdf报表?至于发送啥的都不是啥问题,你只要pdf文件生成了,我想怎么发就怎么发,发到美国都可以。调研发现,我只需要一个工具,就是把界面变成PDF文件的工具。这个工具远在天边近在眼前,既然预览的报表界面是通过浏览器来看的,那我整个浏览器行不行,你浏览器能展示的东西我都能展示,到时候界面做的不好看那你就找前端去,我后端是永不背锅,毕竟他做出来能展示的咱也能展示。

3.实现

生成工具:chrome --headless(如不了解,自行百度,很多帖子都说的很好)

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

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

环境一般分为x86(amd64)和aarch64(arm64),操作系统也会有稍许影响,一般是依赖问题,但根据安装信息依次安装缺少的依赖就行。目前我由于做过些国产环境的适配,所以经过一些踩坑,也适配了一些国产环境现成的安装包,一键安装即可,已亲测成功支持如下:

格式:CPU + OS ,其中aarch64环境为国产服务器环境,鲲鹏、飞腾均可使用
统信UOS也适配过,但是之前的安装包忘了放哪了,评论可提供相关帮助

  • x86

  • 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)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值