Java 导出 word 解决方案

2023-01-09 23:16:11 +08:00
 t202201
目前有一个需求,需要导出 word ,word 里除了普通文字,还有表格,表格不定长度,且有图片。<br><br>有大佬知道有什么简单的方案可以实现吗?
4256 次点击
所在节点    Java
32 条回复
wangsongyan
2023-01-09 23:21:47 +08:00
freemarker+word xml
blankmiss
2023-01-09 23:25:10 +08:00
定义个模版 然后用 库去进行填充?
hhjswf
2023-01-09 23:36:46 +08:00
我的看法是数据给前端,前端渲染 html 转 word
Akitora
2023-01-09 23:40:12 +08:00
freemarker+word xml
kwh
2023-01-09 23:40:48 +08:00
好像安装了 word 的 Windows 上可以通过命令调用转换成其他格式
ElegantOfKing
2023-01-09 23:45:27 +08:00
我恰好在公司做这块的。结论直接告诉你:没有简单的。
调研过很多方案,没有一个合适的,最终只能自研。
建议不要接这个项目。如果真的要接的话,去看看 word 的组成 xml 如何组装,以及 poi jar 包下的一些工具。
Naccl
2023-01-09 23:55:40 +08:00
freemarker+word xml
先用 word 写个模板导出 xml ,用 freemarker 填充
可以看看 https://github.com/pingfangushi/screw
曾经也做过类似的小玩具 https://github.com/Naccl/Java2Doc
nodejx
2023-01-10 00:02:07 +08:00
Suaxi
2023-01-10 00:06:01 +08:00
用 poi-tools 做过文字 + 不定长表格的导出,还行,不过可以试试楼上说的 freemaker + word xml ,以前组长用 jasper 做过按模板导出,也还行
Naccl
2023-01-10 00:10:03 +08:00
@nodejx markdown 是其中一种输出,也支持 word ,核心思想就是按模板填充文本,导出对应格式的文件
lyonbrown4ddd
2023-01-10 00:13:49 +08:00
了解一下 pandoc ? 我记得好像可以 html 转 word 如果不行就先 makrdown 再 word
Jirajine
2023-01-10 01:49:08 +08:00
如果要打印,那就渲染成 pdf ;如果要展示,那就渲染成 HTML 。转成 word 很简单,但是对效果有任何要求的,不拥抱开放格式那就踩坑去吧。
Z0dVmSoDcLSO49S4
2023-01-10 06:29:54 +08:00
t202201
2023-01-10 08:08:44 +08:00
@lyonbrown4ddd 我之前浅浅地用过 pandoc ,当时还是用命令行,不知道有没有 java 的 api
inrmsYu
2023-01-10 08:41:52 +08:00
easyPOI 映射实现
tedzhou1221
2023-01-10 08:49:19 +08:00
poi-tl ,用 freemarker 太难维护了。用了 poi-tl 之后真爽。
luoyonghao
2023-01-10 09:18:45 +08:00
用 poi-tl 吧,我最近做的公司报表就是基于 poi-tl 做的,你的需求很容易实现,目前我的报告实现了普通文本、表格、有序列表、图表( word 图表),合并单元格,还可编写自定义插件实现别的样式,甚至还有代码高亮
Hyakutake
2023-01-10 09:21:46 +08:00
不懂原始需求,如果可以用模板优先关键字加模板,这种最简单。
如果不可以用模板实现,我建议直接 POI ,楼上说的那些基本都是用 POI ,封装一些接口出来方便使用的,我不建议用。更倾向直接 POI ,可以研究一下。另外 注意 office 版本。要兼容。
weijiagege
2023-01-10 09:36:11 +08:00
做过类似的需求,也一样是文字,表格,以及 echart 图片等,另外模板内容不固定随时变换,当时讨论后最终选择让前端来导出。前端做的就是将数据拼装成对应的 html 字符串,后面转 blob 然后调插件导出 docx 文件。坑略多但总体效果还可以。
ql562482472
2023-01-10 09:41:36 +08:00
有开发能力就用 poi 没有就用 poitl 或者 easypoi 很容易。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/907743

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX