【项目技术点总结之三】使用Java生成复杂好看的word或pdf报告的解决方案

前言

项目中往往会遇到需要生成报告的场景,不管是简单报告还是复杂报告,其实都需要找很多资料去尝试,本文会提出几种个人完美解决报告生成的解决方案,而且会提出几个失败但是能生成报告的设想,当然都是踩过坑的,也找了一些java常见的几种报告生成方法。

其实对生成报告而言,解决方案可能也蛮多,但是面对甲方的苛刻要求,即要报告好看,又要图文并茂,本着没有技术解决不了的思想,只能硬着头皮折腾了。一个是记录一下技术点,一个是给有同样需求的哥们一些参考,先上效果图:


一、使用技术介绍

1.1 报告图表生成使用html2canvas

众所周知,word中生成图表怎么着也不会跟前端生成的一样好看、色彩丰富,即使能做到好看和美观,但是对于自动生成报告而言,尤其对开发者而言,简直就是灾难。由于对前后端都有所了解,所以采用解耦的方式实现。

前端用图表组件(Echarts/antcG2/......)渲染好图表,使用html2canvas将对应图表生成base64,直接post请求至服务端,服务端将该base64写入word文件中(具体如何写入见后续)。

1.1.1 html2canvas 的使用

说实话,网上比较多,鉴于后期自己找起来比较容易,还是简单记录一下:

install NPM:

bash 复制代码
npm install --save html2canvas

vue中引入:

javascript 复制代码
import html2canvas from "html2canvas";

具体用法:

javascript 复制代码
/**备注说明:vue中的$refs['name'],相当于原生js中的document.getXXXXBy... */
/*<div class="report-charts" ref="reportcharts">*/
const ref = this.$refs.reportcharts;//reportchart为页面代码中对应的div
html2canvas(ref).then(canvas=>{
   let imgUrl = canvas.toDataURL("image/png"); //base64字符串
   post("url",{baseimg:imgUrl}).then(res=>{
   		//返回已生成报告的信息,进行下载。
   		window.open("url?filename="+res,'_blank');
   });
});

1.1.2 使用过程中遇到的问题

其实也没遇到啥问题,看官方文档已经讲解的很详细了,就是为了文档统一加的一章节。

1.2 后端报告生成使用freemaker

最近转售前了,后续有时间了再回顾着补充喜爱。

相关推荐
田甲10 分钟前
做一款 Type-C 母座读卡器:GL3224 双卡方案实测
c语言·开发语言
SL_staff15 分钟前
制造业交付崩盘?用跨部门节点协同计划打通销售、生产与质量链路
java·开源·产品
严肃小白兔27 分钟前
MATLAB 绘图与科研论文插图制作:图形设计、统计表达与矢量导出
开发语言·matlab·科研绘图
文丑颜不良啊1 小时前
LeetCode2261~2280题目解析
java·leetcode
SL_staff1 小时前
告别规则黑盒:JVS-Rules 在金融风控中的可视化决策编排实践
java·产品·全栈
逃逸线LOF2 小时前
服务网关Gateway
java·运维·gateway
Funlang2 小时前
给机器写的 JavaScript 造个笼子
开发语言·javascript·ecmascript
普通人62 小时前
PHP文件读写完全指南
开发语言·php·1024程序员节
灿飞屋2 小时前
Kotlin与Java虚拟机四:函数
java·python·kotlin·安卓·android jetpack
坤坤子吖3 小时前
Linux网络编程:TCP服务器的多进程与多线程实现
linux·服务器·开发语言·网络·c++·笔记·学习