docxtemplater初使用

958 阅读3分钟

一、文本数据插入

word模板:

image.png

结果:

image.png

注意:在模板中定义了但未指定的值会显示未undeined

const PizZip = require("pizzip"); // 用于读取docx文件
const Docxtemplater = require("docxtemplater"); // 用于操作docx文件
const ImageModule = require("docxtemplater-image-module-free"); // 用于操作docx文件中的图片
const fs = require("fs"); // 用于读写文件
const path = require("path"); // 用于处理文件路径

// 加载docx文件为二进制内容
let 目标文件 = "A.docx"; // 待处理的文件名
let 结果文件 = "输出/A结果.docx"; // 处理后的文件名

let 参数 = {
  // 待替换的参数
  姓名: "万磊",
  民族: "汉",
  s1: 4,
  s2: 2,
  str: "420115202309130011",
  s: [
    {
      s1: 4,
      s2: 2,
      s3: 0,
      s4: 1,
    },
  ]
};

const content = fs.readFileSync(path.resolve(__dirname, 目标文件), "binary"); // 读取待处理文件

const zip = new PizZip(content); // 将待处理文件转换为zip格式

const doc = new Docxtemplater(zip, {});

doc.render(参数); // 渲染文档

const buf = doc.getZip().generate({
  // 生成处理后的文件
  type: "nodebuffer",
  compression: "DEFLATE", // 压缩文件
});

fs.writeFileSync(path.resolve(__dirname, 结果文件), buf); // 将处理后的文件写入磁盘

console.log(` ${结果文件}  文件写入成功`);

二、图像数据插入

word模板:

image.png

结果:

image.png

注意:可以通过修改图像配置里的getSize函数的返回值,自定义图像大小

 getSize: function (img, tagValue, tagName) {
    // 获取图片大小的函数
    // img是options.getImage()返回的图像
    // tagValue是'examples/image.png'
    // tagName是'image'
    // 提示:你可以在这里使用节点模块'image-size'
    console.log(img, tagValue, tagName);
    return [150, 150]; // 返回图片大小
  },

image.png

// 引入所需的模块
const PizZip = require("pizzip"); // 用于读取docx文件
const Docxtemplater = require("docxtemplater"); // 用于操作docx文件
const ImageModule = require("docxtemplater-image-module-free"); // 用于操作docx文件中的图片
const fs = require("fs"); // 用于读写文件
const path = require("path"); // 用于处理文件路径

// 加载docx文件为二进制内容
let 目标文件 = "2.docx"; // 待处理的文件名
let 结果文件 = "输出/B结果.docx"; // 处理后的文件名

let 参数 = {
  // 待替换的参数
  image: "img/Default.jpg", // 待替换的图片路径
};

let 图像配置 = {
  // 图片配置
  centered: false, // 图片是否居中
  fileType: "docx", // 文件类型
  getImage: function (tagValue, tagName) {
    // 获取图片的函数
    // tagValue是'examples/image.png'
    // tagName是'image'
    console.log(tagValue, tagName);
    return fs.readFileSync(tagValue); // 读取图片文件
  },
  getSize: function (img, tagValue, tagName) {
    // 获取图片大小的函数
    // img是options.getImage()返回的图像
    // tagValue是'examples/image.png'
    // tagName是'image'
    // 提示:你可以在这里使用节点模块'image-size'
    console.log(img, tagValue, tagName);
    return [150, 150]; // 返回图片大小
  },
};

const content = fs.readFileSync(path.resolve(__dirname, 目标文件), "binary"); // 读取待处理文件

const zip = new PizZip(content); // 将待处理文件转换为zip格式

const doc = new Docxtemplater(zip, {
  // 创建docxtemplater实例
  modules: [new ImageModule(图像配置)], // 添加图片模块
});

doc.render(参数); // 渲染文档

const buf = doc.getZip().generate({
  // 生成处理后的文件
  type: "nodebuffer",
  compression: "DEFLATE", // 压缩文件
});

fs.writeFileSync(path.resolve(__dirname, 结果文件), buf); // 将处理后的文件写入磁盘

console.log(`${结果文件}文件写入成功`);

三、综合效果

word模板

image.png

结果:

image.png

// 引入所需的模块
const PizZip = require("pizzip"); // 用于读取docx文件
const jszip = require("jszip"); // 用于读取docx文件
const Docxtemplater = require("docxtemplater"); // 用于操作docx文件
const JSZipUtils = require("jszip-utils"); // 用于读取docx文件
const { saveAs } = require("file-saver"); // 用于保存文件
const ImageModule = require("docxtemplater-image-module-free"); // 用于操作docx文件中的图片
const fs = require("fs"); // 用于读写文件
const path = require("path"); // 用于处理文件路径

// 加载docx文件为二进制内容
let 目标文件 = "3.docx"; // 待处理的文件名
let 结果文件 = "输出/C结果.docx"; // 处理后的文件名

let 参数 = {
  // 待替换的参数
  姓名: "万磊",
  性别: "男",
  民族: "汉",
  院系: "信息机电学院",
  学号: "202105030417",
  s: [
    {
      s1: 1,
      s2: 1,
      s3: 1,
      s4: 1,
      s5: 1,
      s6: 1,
      s7: 1,
      s8: 1,
      s9: 1,
      s10: 1,
      s11: 1,
      s12: 1,
      s13: 1,
      s14: 1,
      s15: 1,
      s16: 1,
      s17: 1,
      s18: 1,
    },
  ],
  承诺: "本人正在积极求职(创业),且从未享受过一次性求职创业补贴,现申请领取一次性求职创业补贴。本人承诺所提交的申请资料真实有效,因提供不实资料造成后果的,自愿承担相应的法律责任。",
  image: "img/Default.jpg", // 待替换的图片路径
};

let 图像配置 = {
  // 图片配置
  centered: false, // 图片是否居中
  fileType: "docx", // 文件类型
  getImage: function (tagValue, tagName) {
    // 获取图片的函数
    // tagValue是'examples/image.png'
    // tagName是'image'
    console.log(tagValue, tagName);
    return fs.readFileSync(tagValue); // 读取图片文件
  },
  getSize: function (img, tagValue, tagName) {
    // 获取图片大小的函数
    // img是options.getImage()返回的图像
    // tagValue是'examples/image.png'
    // tagName是'image'
    // 提示:你可以在这里使用节点模块'image-size'
    console.log(img, tagValue, tagName);
    return [150, 150]; // 返回图片大小
  },
};

const content = fs.readFileSync(path.resolve(__dirname, 目标文件), "binary"); // 读取待处理文件

const zip = new PizZip(content); // 将待处理文件转换为zip格式

const doc = new Docxtemplater(zip, {
  // 创建docxtemplater实例
  modules: [new ImageModule(图像配置)], // 添加图片模块
});

doc.render(参数); // 渲染文档

const buf = doc.getZip().generate({
  // 生成处理后的文件
  type: "nodebuffer",
  compression: "DEFLATE", // 压缩文件
});

fs.writeFileSync(path.resolve(__dirname, 结果文件), buf); // 将处理后的文件写入磁盘

console.log("文件写入成功");