https://www.cnblogs.com/wuqilang/p/14085382.html
https://blog.csdn.net/weixin_43880497/article/details/106275823
yarn add docxtemplater@3.19.7 docxtemplater-image-module-free@1.1.1 file-saver@2.0.5 jszip@2.6.1 jszip-utils@^0.1.0 pizzip@3.0.6
import JSZipUtils from "jszip-utils" import docxtemplater from "docxtemplater" import { saveAs } from 'file-saver' import PizZip from 'pizzip' const ImageModule = require('docxtemplater-image-module-free'); const { downWordPath } = require('@/config')
download() { let _this = this // 讀取並獲得模板文件的二進制內容 JSZipUtils.getBinaryContent(downWordPath, function (error, content) { if (error) throw error // 拋出異常 var opts = {} opts.centered = false; opts.getImage = function (tagValue, tagName) { return new Promise(function (resolve, reject) { JSZipUtils.getBinaryContent(tagValue, function (error, content) { if (error) { return reject(error) } return resolve(content) }) }) } opts.getSize = function (img, tagValue, tagName) { // FOR FIXED SIZE IMAGE : return [50, 50]; } var imageModule = new ImageModule(opts); let zip = new PizZip(content) // 創建一個JSZip實例,內容為模板的內容 // let doc=new docxtemplater().loadZip(zip).compile() //沒有圖片的 let doc = new docxtemplater().loadZip(zip).attachModule(imageModule) .compile(); // 創建並加載docxtemplater實例對象 帶有圖片的 doc.resolveData(_this.downloadData).then(function (res) { console.log('ready', res) doc.render() var out = doc.getZip().generate({ type: 'blob', mimeType: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', }) //輸出文檔 saveAs(out, _this.wordName) }) }) },
downWordPath 文件路徑
區分本地和生產環境
downData 下載數據
wordName 輸出路徑
解決默認勾選框的問題
{#registerNation}{checked}{name}{/registerNation} registerNation是我自己在template.docx定義的變量 downloadData里面可以找的 。
{checked}全部選中 包括{} 字體選擇wingdings2 自動變為這樣
另外千萬注意:registerNation單詞前后千萬不能手賤敲空格 。坑了好久自己
至於上面的 必須在word復制。而 不要wps中復制 !!! 在word復制
前提這份對勾符號換成windings字體 然后再復制到代碼中 就出來了 。
也是如此操作
解決圖片問題