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/zh-hk/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

發表回復

登錄後才能評論