前言
后端开发应该避免不了导出 Word 文档的场景,POI、docx4j、dom4j等等,各种实现,各种接口,每一个用起来都不是那么简单。
今天就给大家展示一下,AI 辅助下,后端完成 Word 文档导出是怎么一种体验。
剧透一下,用起来真的舒服。
背景及任务
背景
项目是一个实验室内的管理系统,今天用到的模块主要是管理实验室内的技术人员信息,导出功能是为了打印档案,进行纸质备份使用。
任务
实际项目中,选中一条技术人员信息的数据,点击“导出”按钮,就会导出相关的人员履历文档。
文档要求 docx 格式,文档模板是客户指定的。
为了降低理解难度,本次分享精简了模板和信息的复杂度,屏蔽了页面代码和简单的数据库查询代码,仅突出展示模板导出相关代码。
操作过程
本次分享依然采用 Cursor + Claude 3.7。
生成前已经存在的文件:
- DocxDemo.java。
- word_template.docx:和截图相同结构的word文件。
Word导出代码生成
因为导出 Word 的功能逻辑比较一致,除了生成代码,我还想让 AI 帮我把导出部分直接封装起来,方便后续复用。
这里我直接通过代码的方式,告诉最终封装的方法,即:DocxTplUtils.createDocx,包括方法参数,这比大段自然语言效果好多了。
talk is cheap,show me the code,对 AI 依然适用~
上下文:
-
如上截图中
DocxDemo.java,模拟的调用代码,正常项目中是“页面”-“控制器”-“业务逻辑”,业务逻辑中调用的这些代码。 -
模板截图。
提示词:
你是一个经验丰富的Java程序员。
现在我要基于dom4j 1.6.1实现基于word模板导出word的功能,其中word模板采用freemarker语法进行动态化。
---
Map<String, Object> dataMap = new HashMap<>();
DocxTplUtils.createDocx(dataMap, templatePath, docxTplName, outputFileTempPath, outputFileName);
---
DocxTplUtils.createDocx是基于dom4j封装的方法,只需要传入dataMap即可自动根据key替换模板中的变量,并实现导出模板导出。
如图是我将要实现的一个word模板,请帮我实现模板xml和相关java代码。
结果:
注意:
生成的 document.xml.example 需要改名为 document.xml 并替换 word_template.docx/word/document.xml,这里是把 word_template.docx 当做压缩文件打开,并替换相应位置文件。
效果:
为了更好的说明是根据数据生成的,我们将传给模板的数据也调整一版。
AI 一句话即可完成调整。
生成过程分析
为了大家更好的理解,这里对生成过程稍微分析一下。
生成步骤
- 根据模板截图,分析出来模板的结构,然后创建
DocxTplUtils.java文件,实现对文本、表格两种变量形式的动态化。 - 根据模板截图数据,在
DocxDemo.java中构造数据Map。原本使用的是截图数据,后来为了更好的展示模板生成效果,我让 AI 更改了数据。 - 根据模板截图,生成替换docx文件中的xml,我们导出代码中实质的
模板。此处需要人工替换docx中的document.xml。
除了以上的主要过程外,AI 还生成了说明文档,真的非常详细。
总结
本次分享主要介绍了如果通过 AI 辅助后端基于模版方式实现导出 Word 。
之前手动实现过类似功能,代码逻辑涉及到java代码、模板xml、docx多方面,本来以为会和 AI 多次拉扯后才能完成,没想到过程比预期好太多了,第一次就基本完成了整体逻辑的生成,只在标签判断部分有一些小瑕疵。
当年要是有 AI,我做这个功能就不用加班了。