前端docx-templates生成word文档

发布时间 2023-12-17 16:22:38作者: 天宁哦

说明

docx-templates项目地址:https://github.com/guigrpa/docx-templates
原文:https://juejin.cn/post/7170695319004315679?searchId=202312171247306E0B93A485DAE6B4E304

这个库能干啥?

这个库能做的:

  • 替换Word模板中的文字
  • 实现FOR和IF操作
  • 在文档指定位置插入图片
  • 在模板里写JavaScript代码(!)
  • 在文档指定位置插入HTML,并让word尝试转换

不能做的:

  • 程从头开始编写文档;你需要先有一个模板
  • 模板,即一个主模板里嵌套了子模板

安装

npm install docx-templates
或
yarn add docx-templates

Node用法

package.json中添加"type": "module"
在index.js中添加如下内容

import {createReport} from 'docx-templates';
import fs from 'fs';

const template = fs.readFileSync('template.docx');

const buffer = await createReport({
  template,
  data: {
    title: "Test",
    data: [
      { name: "李龙", age: 15, grade: 85,img:fs.readFileSync("./src/1.jpg")},
      { name: "张三", age: 20, grade: 95,img:fs.readFileSync("./src/1.jpg") },
      { name: "张伟", age: 25, grade: 45,img:fs.readFileSync("./src/1.jpg") },
      { name: "王武", age: 20, grade: 65,img:fs.readFileSync("./src/1.jpg") },
    ],
  },
  additionalJsContext: {
    // width height: cm
    injectImage: (base64, width, height) => {
      return { width: width, height: height, data: base64, extension: ".png" };
    },
  },
  cmdDelimiter: ["{{", "}}"],
});

fs.writeFileSync('report.docx', buffer)

这是template.docx模版
image

最后生成的样子
image