技术栈无关doc文档生成方案
日常工作接触到一些需要生成各种 doc 文档的场景,总结了一下共有几种方法来生成 doc 文档:
Apache POI(Java技术栈)
模板
XML 模板
HTML 模板
第一种是跟特定技术栈绑定的,并且我没有太多使用经验,重点就介绍后面两种
基本操作
使用模板来生成一般就是把一个 doc 文件另存为 xml 或者 html 文件, 然后使用一些模板库,通过模板语法生成一个渲染后的 xml 或者 html, 然后将其存为 doc 文件。
很多语言都有相关的模板库, 如 Java 的 Freemarker, JS 的 art-template。
这在实现上就有许多灵活性,如可以直接在前端直接渲染相关 xml 或者 html, 直接导出为 doc 文档。
XML 模板
这种模板一般适用于较为简单的场景,比如一些简单字段的填充、简单表格的渲染
HTML 模板
这种模板能做的事就比较多,比如可以通过将 doc 文件转换的 HTML 直接展示在前端页面, 前端根据需要使用模板渲染对应的信息、甚至附上图片等。但需要注意的是,对于图片需要特殊处理转为 data URL
可以参考一个前端库 html2word, 其就是遍历 DOM 结构, 将图片转为内嵌 data URL,最后生成 html 保存。
这种方式可以实现所在即所得的效果。
用哪种
一般来说,如果字段比较少,填充逻辑较简单,我倾向于选择使用 XML 模板。
如果填充逻辑复杂,字段多、各种循环判断,我则选择使用 HTML 模板, 最重要的一点,如果需要先预览后打印,肯定只能选择 HTML 模板。