主页 > 游戏开发  > 

我如何开发DocJava工具,简化文档模板生成

我如何开发DocJava工具,简化文档模板生成

在开发 Excel 模板填充工具 之后,我发现 Word 文档的填充需求同样广泛。许多业务场景需要基于固定模板动态生成文档,例如合同、报表、出口贸易文件等。手动填充这些文档效率低下,且容易出错,因此我决定开发一个 doc 工具,简化 Word 文档模板的生成过程。


核心思路:基于标签解析和数据替换

doc 工具的核心理念是 将模板中的数据用 Map 封装后传入,再解析 Word 模板中的标签并替换数据。

在 Word 模板(.docx)文件中,我们可以使用类似 #{Map.TradeMode}、#{Table.CNYSalesAmount} 这样的标签作为占位符,来标识需要填充的数据。例如,Word 文档模板可能包含以下内容:

贸易模式:#{Map.TradeMode} 销售金额:#{Table.CNYSalesAmount}

而在代码中,我设计了 DocUtil.replaceContent 方法来自动填充这些占位符,调用方式如下:

​ DocUtil.replaceContent(response.getOutputStream(), map, new ClassPathResource("report/ExportXXXXXXX.docx").getInputStream()); ​

其中,map 是封装后的数据结构,例如:

map.put("#{Map.HSCode}", exportXXXXXXDTO.getHSCode()); map.put("Table", exportXXXXXXXXXXDTOList); #{Map.HSCode} 这样的标签会被 exportXXXXXXDTO.getHSCode() 的值替换。"Table" 代表一组数据,适用于表格填充的情况。
解析 Word 表格中的占位符并替换数据

在 Word 文档中,表格是一个常见的结构,我们需要检查表格中的每一行是否包含 #{Map 这样的标签,并进行替换。以下是核心代码示例:

for (int i = 0; i < xwpfTable.getRows().size(); i++) { if (checkRowCell(xwpfTable.getRows().get(i), "#{Map")) { // 遍历该行的所有单元格 for (XWPFTableCell xwpfTableCell : xwpfTable.getRows().get(i).getTableCells()) { for (XWPFParagraph cellParagraph : xwpfTableCell.getParagraphs()) { // 替换单元格中的占位符 updateRuns(cellParagraph.getRuns(), replaceMap, "#{Map"); } } } }

代码解析:

遍历 Word 文档中的表格行 xwpfTable.getRows().get(i)。checkRowCell() 方法检查该行是否包含 #{Map 作为占位符。如果包含,则遍历该行的每个单元格 xwpfTableCell.getParagraphs()。updateRuns() 方法用于替换占位符,将 #{Map.xxx} 替换成 replaceMap 里的数据。
为什么要用 Map 结构? 灵活性:Map 结构可以动态存储任意类型的数据,不需要预定义字段。解耦模板和数据:模板可以自由调整,不影响代码逻辑。支持表格和列表:不仅能填充单个值,还能处理数据表格的动态填充。
doc 工具的应用场景 自动生成合同、协议:比如贸易合同、租赁协议等报表填充:如销售数据报表、财务报表等出口贸易文件:如报关单、发票、提单等
最终的优化效果

✅ 减少手动填充工作量,提升开发效率 ✅ 支持不同模板切换,只需调整 Word 文件,无需改动代码 ✅ 更易维护,模板逻辑和数据分离,后期扩展更方便

通过 doc 工具,我成功实现了 Word 文档的自动填充,大幅提升了开发效率,也为业务系统带来了极大的便利。 🚀

标签:

我如何开发DocJava工具,简化文档模板生成由讯客互联游戏开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“我如何开发DocJava工具,简化文档模板生成