【项目技术点总结之三】使用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

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

相关推荐
python百炼成钢7 小时前
43.Linux LCD驱动
java·linux·运维·驱动开发
w***H6507 小时前
Springboot项目:使用MockMvc测试get和post接口(含单个和多个请求参数场景)
java·spring boot·后端
橘子编程7 小时前
仓颉语言:华为新一代编程利器
java·c语言·开发语言·数据库·python·青少年编程
a***13147 小时前
Spring Boot 条件注解:@ConditionalOnProperty 完全解析
java·spring boot·后端
axihaihai7 小时前
maven的构建问题
java·linux·maven
tgethe7 小时前
Java注解
java·后端
稚辉君.MCA_P8_Java7 小时前
DeepSeek Java 多线程打印的12种实现方法
java·linux·后端·架构·maven
lsx2024067 小时前
Bootstrap5 折叠功能详解
开发语言
JienDa7 小时前
JienDa聊PHP:电商系统实战架构深度解析与优化策略
开发语言·架构·php
lingggggaaaa7 小时前
免杀对抗——C2远控篇&PowerShell&C#&对抗AV-EDR&停用AMSI接口&阻断ETW跟踪&调用
c语言·开发语言·c++·学习·安全·c#·免杀对抗