V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
t202201
V2EX  ›  Java

Java 导出 word 解决方案

  •  
  •   t202201 · 2023-01-09 23:16:11 +08:00 · 3755 次点击
    这是一个创建于 465 天前的主题,其中的信息可能已经有所发展或是发生改变。
    目前有一个需求,需要导出 word ,word 里除了普通文字,还有表格,表格不定长度,且有图片。<br><br>有大佬知道有什么简单的方案可以实现吗?
    第 1 条附言  ·  2023-01-11 08:40:57 +08:00
    最终决定用了 poi-tl ,http://deepoove.com/poi-tl ,确实很强大,满足了所有需求。按照这个框架,基本上一天就做完了需求。
    32 条回复    2023-01-10 23:15:35 +08:00
    wangsongyan
        1
    wangsongyan  
       2023-01-09 23:21:47 +08:00 via iPhone
    freemarker+word xml
    blankmiss
        2
    blankmiss  
       2023-01-09 23:25:10 +08:00
    定义个模版 然后用 库去进行填充?
    hhjswf
        3
    hhjswf  
       2023-01-09 23:36:46 +08:00 via Android
    我的看法是数据给前端,前端渲染 html 转 word
    Akitora
        4
    Akitora  
       2023-01-09 23:40:12 +08:00
    freemarker+word xml
    kwh
        5
    kwh  
       2023-01-09 23:40:48 +08:00
    好像安装了 word 的 Windows 上可以通过命令调用转换成其他格式
    ElegantOfKing
        6
    ElegantOfKing  
       2023-01-09 23:45:27 +08:00
    我恰好在公司做这块的。结论直接告诉你:没有简单的。
    调研过很多方案,没有一个合适的,最终只能自研。
    建议不要接这个项目。如果真的要接的话,去看看 word 的组成 xml 如何组装,以及 poi jar 包下的一些工具。
    Naccl
        7
    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
        8
    nodejx  
       2023-01-10 00:02:07 +08:00
    Suaxi
        9
    Suaxi  
       2023-01-10 00:06:01 +08:00 via Android
    用 poi-tools 做过文字 + 不定长表格的导出,还行,不过可以试试楼上说的 freemaker + word xml ,以前组长用 jasper 做过按模板导出,也还行
    Naccl
        10
    Naccl  
       2023-01-10 00:10:03 +08:00
    @nodejx markdown 是其中一种输出,也支持 word ,核心思想就是按模板填充文本,导出对应格式的文件
    lyonbrown4ddd
        11
    lyonbrown4ddd  
       2023-01-10 00:13:49 +08:00 via iPhone
    了解一下 pandoc ? 我记得好像可以 html 转 word 如果不行就先 makrdown 再 word
    Jirajine
        12
    Jirajine  
       2023-01-10 01:49:08 +08:00
    如果要打印,那就渲染成 pdf ;如果要展示,那就渲染成 HTML 。转成 word 很简单,但是对效果有任何要求的,不拥抱开放格式那就踩坑去吧。
    luxiang1204
        13
    luxiang1204  
       2023-01-10 06:29:54 +08:00 via Android
    t202201
        14
    t202201  
    OP
       2023-01-10 08:08:44 +08:00
    @lyonbrown4ddd 我之前浅浅地用过 pandoc ,当时还是用命令行,不知道有没有 java 的 api
    inrmsYu
        15
    inrmsYu  
       2023-01-10 08:41:52 +08:00
    easyPOI 映射实现
    tedzhou1221
        16
    tedzhou1221  
       2023-01-10 08:49:19 +08:00
    poi-tl ,用 freemarker 太难维护了。用了 poi-tl 之后真爽。
    luoyonghao
        17
    luoyonghao  
       2023-01-10 09:18:45 +08:00
    用 poi-tl 吧,我最近做的公司报表就是基于 poi-tl 做的,你的需求很容易实现,目前我的报告实现了普通文本、表格、有序列表、图表( word 图表),合并单元格,还可编写自定义插件实现别的样式,甚至还有代码高亮
    waysn39
        18
    waysn39  
       2023-01-10 09:21:46 +08:00
    不懂原始需求,如果可以用模板优先关键字加模板,这种最简单。
    如果不可以用模板实现,我建议直接 POI ,楼上说的那些基本都是用 POI ,封装一些接口出来方便使用的,我不建议用。更倾向直接 POI ,可以研究一下。另外 注意 office 版本。要兼容。
    weijiagege
        19
    weijiagege  
       2023-01-10 09:36:11 +08:00
    做过类似的需求,也一样是文字,表格,以及 echart 图片等,另外模板内容不固定随时变换,当时讨论后最终选择让前端来导出。前端做的就是将数据拼装成对应的 html 字符串,后面转 blob 然后调插件导出 docx 文件。坑略多但总体效果还可以。
    ql562482472
        20
    ql562482472  
       2023-01-10 09:41:36 +08:00
    有开发能力就用 poi 没有就用 poitl 或者 easypoi 很容易。
    lwc645089781
        21
    lwc645089781  
       2023-01-10 10:06:05 +08:00
    aspose word 非常简单,效果也是最好的。只是不免费
    Mandelo
        22
    Mandelo  
       2023-01-10 10:08:55 +08:00
    用模板填充的路过,表格头像都可以
    nyar
        23
    nyar  
       2023-01-10 10:16:02 +08:00
    aspose word 来做很简单,aspose 网上也有破解版,可以先试试效果。
    Gavin666
        24
    Gavin666  
       2023-01-10 10:40:47 +08:00
    关键词:libreoffice
    OrangeAdd
        25
    OrangeAdd  
       2023-01-10 10:43:32 +08:00
    楼主可以看看这个 http://deepoove.com/poi-tl ,亲测挺好用的。
    LovelornOwl
        26
    LovelornOwl  
       2023-01-10 10:54:12 +08:00
    java 导 word 用 docx4j
    nitmali
        27
    nitmali  
       2023-01-10 11:08:43 +08:00
    jxls
    YvenChang
        28
    YvenChang  
       2023-01-10 11:11:22 +08:00
    我司一开始用的最简单直接的方法就是组装一个 html 然后输出成 docx 后缀的文件,office 可以直接打开 html 文件,但是问题是对他做任何修改都会在本地生成一个 html 资源目录。
    解决方案就是组装成 mhtml 格式就能让这些资源都保存在一个文件里。
    但是...emmm 就是会有各种奇奇怪怪的问题。
    最好的方案当然还是找个成熟的框架,不过这个方法应急还是可以的。
    xuanbg
        29
    xuanbg  
       2023-01-10 11:19:19 +08:00
    POI
    gg1025
        30
    gg1025  
       2023-01-10 11:23:31 +08:00
    poi-tl 神器
    lyonbrown4ddd
        31
    lyonbrown4ddd  
       2023-01-10 14:12:50 +08:00
    @t202201 pandoc 我记得没有 java api 拿 command 方式调用么 我觉得这个是最简单的方式了 只是需要集成一下 pandoc
    b1gCi
        32
    b1gCi  
       2023-01-10 23:15:35 +08:00 via Android
    原来做过几年相关的开发,推荐 docx4j ,不行就自己 freemarker 生成 word xml
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4958 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 09:41 · PVG 17:41 · LAX 02:41 · JFK 05:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.