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

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

相关推荐
80530单词突击赢10 小时前
JavaWeb进阶:SpringBoot核心与Bean管理
java·spring boot·后端
3GPP仿真实验室10 小时前
【Matlab源码】6G候选波形:OFDM-IM 增强仿真平台 DM、CI
开发语言·matlab·ci/cd
devmoon10 小时前
在 Polkadot 上部署独立区块链Paseo 测试网实战部署指南
开发语言·安全·区块链·polkadot·erc-20·测试网·独立链
lili-felicity10 小时前
CANN流水线并行推理与资源调度优化
开发语言·人工智能
爬山算法10 小时前
Hibernate(87)如何在安全测试中使用Hibernate?
java·后端·hibernate
沐知全栈开发10 小时前
CSS3 边框:全面解析与实战技巧
开发语言
island131411 小时前
CANN GE(图引擎)深度解析:计算图优化管线、内存静态规划与异构 Stream 调度机制
c语言·开发语言·神经网络
云姜.11 小时前
线程和进程的关系
java·linux·jvm
是码龙不是码农11 小时前
支付防重复下单|5 种幂等性设计方案(从初级到架构级)
java·架构·幂等性
曹牧11 小时前
Spring Boot:如何在Java Controller中处理POST请求?
java·开发语言