本文将记录如何用js
生成word
文件,并在node服务器
端将word
转换成pdf
。记录的代码均是在真实业务场景中使用成功的代码,没有记录中间踩坑的过程。想直接抄答案的家人们可以跳转到1.2 程序编写
部分,最终效果图可在1.2 程序编写
部分中4. 效果展示
模块查看。
如果有更好的解决方案,也欢迎大家在评论区讨论、分享~
本文demo存放地址:github.com/ChicKo1108/…
一、DocxTemplater:使用js生成word
老铁们,话不多说,先上链接:Docxtemplater | Word, Powerpoint, Excel generation using templates in your application | docxtemplater
DocxTemplater
是一个基于模板
生成最终文件的插件,它通过一个简单的{tag}
语法将预设的数据填入模板Word
或者Powerpoint
中,帮助开发者快速生成最终文件。
由于DocxTemplater
是基于{tag}
变量替换,得到最终的文件,因此文件的样式是非常可控的。在开发过程中,设计师只需要出一版最终的成品word,开发者将内容替换成对应的{tag}
即可(再也不用被设计师追着还原设计稿了!)。
DocxTemplater
是一个收费的库,但是它拥有免费的开源版本,对于我所涉及的业务,使用免费版本完全可以解决。
开源版包括的功能包括:
{tag}
替换- 条件判断
- 循环
- 图片渲染
除免费版外,它还拥有pro plan(950€ per\year)
、Entreprise plan(24500€ per\year)
,具体功能大家可以前往官网查看。(但是白嫖的永远是最香的!)
由于我的业务只涉及生成word和pdf,所以本文只介绍word的相关内容,如果需要处理ppt,大家可前往官网自行学习。
1.1 模板语法
在了解模板语法之前,我们需要先创建一个tempalte.docx
模板文件。
变量替换
变量使用{key}
标签,在tempalte.docx
文件中输入以下模板:
Hello, my name is {name}.
然后准备以下数据:
let data = {
name: "千万",
}
最终我们生成的docx文件将会是:
Hello, my name is 千万.
条件判断
条件判断使用{#key}
开始,使用{/key}
结束,最简单的用法是使用Boolean
类型数据进行填充。
Hello, my name is {name}.
{#hasAge}I'm {age} years old.{/hasAge}
{#hasWeight}My weight is {weight}.{/hasWeight}
然后准备以下数据:
let data = {
name: "千万",
hasAge: true,
age: 23,
hasWeight: false,
}
最终我们生成的docx文件将会是:
Hello, my name is 千万.
I'm 23 years old.
除了Boolean
类型的数据以外,我们也可以填充其他类型:
type | 是否显示模块 |
---|---|
false / 空数组 | 不显示 |
非空数组 | 显示, |