Docxtemplater:纯JS生成Word文档的航母式玩具

一、代码生成Word文档的新星

Docxtemplater,是一款纯JS生成Word文档的开源工具,它可以通过简单的代码,生成格式不乱的文档,解决了手动生成文档的烦恼。其技术框架是Node.js和AngularJS,经过对IO和AngularJS的慢性能进行分析,并在代码调整后进行测试,能够完美地解决模板克隆、图像插入、表格绑定、流程模板录入等诸多问题。

二、使用方法

1、首先下载:

npm install docxtemplater // 安装

const Docxtemplater = require('docxtemplater');
const fs = require('fs');
const path = require('path');
const PizZip = require('pizzip');
// ⚠️注意:需要安装 pizzip-utils,否则会出现「PizZip is not defined」的问题
const pizzipUtil = require('pizzip/utils');

const templateStr = fs.readFileSync(path.resolve(__dirname, './test.docx'), 'binary');
const template = new Docxtemplater(new PizZip(templateStr));

const body = {
  name: '李**',
  age: 24,
  address: '深圳市南山区xx路xx号'
}

template.setData(body);
template.render();
const result = template.getZip().generate({type: 'nodebuffer'});

fs.writeFileSync(path.resolve(__dirname, './result.docx'), result);

2、代码解析:

上面这段代码中,我们下载了docxtemplater,同时还需要把模板(test.docx)读成二进制文件。如:const templateStr = fs.readFileSync(path.resolve(\_\_dirname, './test.docx'), 'binary')。接着将模板放入docxtemplater中:const template = new Docxtemplater(new PizZip(templateStr));。如果有数据需要更改,可通过template.setData(body)方法来更改,最后执行渲染方法template.render(),并通过getZip().generate({type: 'nodebuffer'})来获取二进制文件。当数据及Word模板输入完成后,保存文件即可。

三、常见问题

1、中文乱码问题:

npm -g install mammoth
const mammoth = require('mammoth');
const html = fs.readFileSync('index.html', 'utf8');

mammoth.convertToHtml({ text: html }, {prettyPrint: true})
  .then((result) => {
    // 读取 Docx 模板并赋值以替换 {{ variable }} 代码块。不同的代码块用 {{# array }}...{{/ array }} 包裹
    const docx = fs.readFileSync('./template.docx', 'binary');
    template = new Docxtemplater();
    template.loadZip(new PizZip(docx));

    // 关键步骤:将 HTML 转换后的结果赋值给模板中的一个变量。此处注意:千万不要将如 

test

这种包裹在唯一的 标签内 template.setData({ VARIABLE_NAME: result.value }); // 对应模板中包含类似这样的 {{ VARIABLE_NAME }} 代码块,将其替换为上面所请求的数据 const buff = template.getZip().generate({ type: 'nodebuffer' }); fs.writeFileSync('test.docx', buff); }) .done();

2、将图片插入到Word中:

const imageBuf = fs.readFileSync('test.png'); // 将图片二进制读入 Node.js 环境
const base64Img = `data:image/png;base64,${Buffer.from(imageBuf).toString('base64')}`; // 将图片的结果转换为Base64
doc.setData({ logo: base64Img }); // 将图片编码为base64并插入到文档中

3、使用SVGs

// 1. 转换 SVG 到 PNG
const Rsvg = require('librsvg').Rsvg;
const rsvg = new Rsvg(svgbuf);
const pngbuf = rsvg.render({
    format: 'png',
    width: dimensions.width,
    height: dimensions.height,
}).data;

// 2. 通过 Base64 数据插入到报告中
pngurl = 'data:image/png;base64,' + Buffer.from(pngbuf).toString('base64');
doc.setData({
    logo: pngurl,
});

四、结论

Docxtemplater给我们带来了更多的文档自动化生成可能性,同时还是一个完全开源的工具。现在使用Docxtemplater,您可以使用更加完整、自我定制的文档,而不需要耗费大量工作时间。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/246245.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-12 13:14
下一篇 2024-12-12 13:14

相关推荐

  • 使用Spire.PDF进行PDF文档处理

    Spire.PDF是一款C#的PDF库,它可以帮助开发者快速、简便地处理PDF文档。本篇文章将会介绍Spire.PDF库的一些基本用法和常见功能。 一、PDF文档创建 创建PDF文…

    编程 2025-04-29
  • Python爬虫文档报告

    本文将从多个方面介绍Python爬虫文档的相关内容,包括:爬虫基础知识、爬虫框架及常用库、爬虫实战等。 一、爬虫基础知识 1、爬虫的定义: 爬虫是一种自动化程序,通过模拟人的行为在…

    编程 2025-04-28
  • Python生成PDF文档

    Python是一门广泛使用的高级编程语言,它可以应用于各种领域,包括Web开发、数据分析、人工智能等。在这些领域的应用中,有很多需要生成PDF文档的需求。Python有很多第三方库…

    编程 2025-04-28
  • layuiadmin开发者文档全面解读

    layui是一款基于jQuery和CSS的模块化前端UI框架。其中,layuiadmin是layui官方开源后台管理系统模板,提供了大量的模块和插件,以便开发者快速构建后台管理系统…

    编程 2025-04-25
  • Python3.8中文文档解读

    Python 是一种解释型语言、面向对象、动态数据类型的高级语言。 本篇文章旨在详细阐述 Python3.8 中文文档,从各个方面深入剖析 Python 的优势,包括基础语法、文件…

    编程 2025-04-25
  • jstree中文api文档详解

    一、jstree概述 jstree是一款跨浏览器的jQuery树形菜单插件,提供了使用JSON数据源创建交互式树形结构的功能。它是面向开发者的开源软件,已经被广泛使用在许多网站和应…

    编程 2025-04-25
  • 探究matplotlib中文文档

    一、介绍 Matplotlib是一个Python的可视化库,它提供了丰富的绘图工具和良好的交互性,可用于生成高质量的二维图形、三维图形和动画等。它的中文文档是对于使用者非常友好的参…

    编程 2025-04-24
  • Vue-Treeselect 中文文档深入解析

    一、 介绍 Vue treeselect 是一个易于使用,高效,具有可定制和实用功能的多选下拉菜单组件。它使用Vue.js组件系统,支持按需渲染选项和动态搜索,并能够呈现任意类型的…

    编程 2025-04-24
  • 使用PoiWord将Word文档转换为PDF格式,提高文档可读性和分享效果

    Microsoft Word是一款功能强大的文字处理软件,在日常工作和学习中被广泛使用。然而,Word文档需要安装Microsoft Office软件才能打开,而且在不同的操作系统…

    编程 2025-04-24
  • Node.js文档全面解析

    一、安装Node.js Node.js是基于V8引擎的,它支持许多操作系统,如Windows、Mac和Linux。安装Node.js之前,需要先选择相应的操作系统版本。可以在官方网…

    编程 2025-04-23

发表回复

登录后才能评论