一、文本数据插入
word模板:
结果:
注意:在模板中定义了但未指定的值会显示未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模板:
结果:
注意:可以通过修改图像配置里的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]; // 返回图片大小
},
// 引入所需的模块
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模板
结果:
// 引入所需的模块
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("文件写入成功");