Jorgen's blog Jorgen's blog
首页
  • 平台架构
  • 混合式开发记录
  • 推送服务
  • 数据分析
  • 实时调度
  • 架构思想

    • 分布式
  • 编程框架工具

    • 编程语言
    • 框架
    • 开发工具
  • 数据存储与处理

    • 数据库
    • 大数据
  • 消息、缓存与搜索

    • 消息队列
    • 搜索与日志分析
  • 前端与跨端开发

    • 前端技术
    • Android
  • 系统与运维

    • 操作系统
    • 容器化与 DevOps
  • 物联网与安全

    • 通信协议
    • 安全
    • 云平台
收藏
  • 关于我
  • 终身学习
  • 关于时间的感悟
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

jorgen

Love it, make mistakes, learn, keep grinding.
首页
  • 平台架构
  • 混合式开发记录
  • 推送服务
  • 数据分析
  • 实时调度
  • 架构思想

    • 分布式
  • 编程框架工具

    • 编程语言
    • 框架
    • 开发工具
  • 数据存储与处理

    • 数据库
    • 大数据
  • 消息、缓存与搜索

    • 消息队列
    • 搜索与日志分析
  • 前端与跨端开发

    • 前端技术
    • Android
  • 系统与运维

    • 操作系统
    • 容器化与 DevOps
  • 物联网与安全

    • 通信协议
    • 安全
    • 云平台
收藏
  • 关于我
  • 终身学习
  • 关于时间的感悟
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 平台架构
  • 技术选型
  • 开发脚手架
  • UI规范
  • 开发规范
  • 代码分支管理模型
  • 需求分析与管理
  • 权限设计
  • 树形组织设计
  • 协议设计
  • 指令交互
  • OTA
  • 规则引擎
  • 数据流转
  • 报告生成与导出
    • 简介
      • 不同方案对比
    • 功能
    • 使用
    • 拓展
      • 思考
      • 方案
  • 监控设备接入
  • 时序数据库
  • 平台监控
  • 云⛈
  • 接口设计
  • 安全传输
  • CI&CD
  • 缓存
  • 消息处理引擎
  • 性能调优🔥
  • 线上事故🔥
  • 混合式开发记录
  • 推送服务
  • 机器人通信协议
  • 数据分析
  • flink模板工程
  • 实时调度
  • 机器人模块化设计
  • STM32入门
  • 开发日志
Jorgen
2023-02-05
目录

报告生成与导出

说明

主要记录下如何使用Poi-tl生成复杂模板

# 简介

poi-tl(poi template language)是Word模板引擎,使用Word模板和数据创建很棒的Word文档。

在文档的任何地方做任何事情(Do Anything Anywhere)是poi-tl的星辰大海。

# 不同方案对比

方案 移植性 功能性 易用性
Poi-tl Java跨平台 Word模板引擎,基于Apache POI,提供更友好的API 低代码,准备文档模板和数据即可
Apache POI Java跨平台 Apache项目,封装了常见的文档操作,也可以操作底层XML结构 文档不全,这里有一个教程:http://deepoove.com/poi-tl/apache-poi-guide.html
Freemarker XML跨平台 仅支持文本,很大的局限性 不推荐,XML结构的代码几乎无法维护
OpenOffice 部署OpenOffice,移植性较差 - 需要了解OpenOffice的API
HTML浏览器导出 依赖浏览器的实现,移植性较差 HTML不能很好的兼容Word的格式,样式糟糕 -
Jacob、winlib Windows平台 - 复杂,完全不推荐使用

# 功能

使用它,你能轻松应对诸如以下这些场景

场景 场景 场景

Word模板引擎功能 描述
文本 将标签渲染为文本
图片 将标签渲染为图片
表格 将标签渲染为表格
列表 将标签渲染为列表
图表 条形图(3D条形图)、柱形图(3D柱形图)、面积图(3D面积图)、折线图(3D折线图)、雷达图、饼图(3D饼图)、散点图等图表渲染
If Condition判断 根据条件隐藏或者显示某些文档内容(包括文本、段落、图片、表格、列表、图表等)
Foreach Loop循环 根据集合循环某些文档内容(包括文本、段落、图片、表格、列表、图表等)
Loop表格行 循环复制渲染表格的某一行
Loop表格列 循环复制渲染表格的某一列
Loop有序列表 支持有序列表的循环,同时支持多级列表
Highlight代码高亮 word中代码块高亮展示,支持26种语言和上百种着色样式
Markdown 将Markdown渲染为word文档
Word批注 完整的批注功能,创建批注、修改批注等
Word附件 Word中插入附件
SDT内容控件 内容控件内标签支持
Textbox文本框 文本框内标签支持
图片替换 将原有图片替换成另一张图片
书签、锚点、超链接 支持设置书签,文档内锚点和超链接功能
Expression Language 完全支持SpringEL表达式,可以扩展更多的表达式:OGNL, MVEL…​
样式 模板即样式,同时代码也可以设置样式
模板嵌套 模板包含子模板,子模板再包含子模板
合并 Word合并Merge,也可以在指定位置进行合并
用户自定义函数(插件) 插件化设计,在文档任何位置执行函数

# 使用

Java maven方式使用

<dependency>
  <groupId>com.deepoove</groupId>
  <artifactId>poi-tl</artifactId>
  <version>1.12.1</version>
</dependency>
1
2
3
4
5

# 拓展

此处就不在详细的介绍如何使用了,感兴趣或者有报告生成需求的直接点击官网 (opens new window)进行学习。

需求

在word文档中嵌入echarts图标

# 思考

本来这个需求原本是手工完成,用户在浏览器看到echarts图,点击下载。然后粘贴在word中,完成报告。现在需要通过程序来实现。

  • 要么前端生成word文档,渲染后直接下载。
  • 要么使用Java方式生成,并使用POI方式插入图片。

# 方案

JS生成Word

  • html-docx-js (opens new window):Converts HTML documents to DOCX in the browser
  • jQuery-Word-Export (opens new window)jQuery plugin for exporting HTML and images to a Microsoft Word document 优点: 通过js的方式就能生成word。 缺点: 文件不能太大 (5M),不灵活。

使用JS的方式不行,还是回到Java程序来生成。

JAVA生成

  • ECharts-Java (opens new window): A Java Visualization Library based on Apache ECharts 5.x. 基于 Apache ECharts 5.x 的 Java 可视化类库。

这个确实能用Java实现生成echarts图表与echarts需要option。但是,我需要拿到图片,然后将图片插入到Word中。这不算是一个最终的解决方案。

Node

  • echarts-node-export-server (opens new window): Node.js server for offline export of ECharts graphs

最终,我将目光移到了Node上。功夫不负有心人,终于找到了通过option参数就能获取到图片base64数据。也就意味着,能直接写入Word中了。

最终方案

使用 **ECharts-Java (opens new window)**生成符合格式的JSON版本的option,然后调用node-echarts (opens new window) REST接口生成(图片,直接保存本地,返回地址),base64,然后转换成图片。再插入到Word中。

最后呢,想表达一句。技术从不是从一而终的,一个需求对应一个直接的解决方案。而是多种方案的折中,取长补短,各取所长。最后达到一个相对而言的比较能接受的方案。

当然,我的这个方案也并不完美,不过提供了一种思路,解决问题时,不要总是将目光局限在自己熟悉领域的一亩三分地里,打开眼界,格局打开👐。或许就能发现不一样的风景🎨。

上次更新: 2023/02/19, 11:42:06
数据流转
监控设备接入

← 数据流转 监控设备接入→

最近更新
01
STM32入门
03-09
02
ADB调试
03-09
03
微信小程序学习记录
02-09
更多文章>
Theme by Vdoing | Copyright © 2019-2025 Jorgen | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式