vue項目根據word模版導出word文件

一、安裝依賴

//1、docxtemplaternpm install docxtemplater pizzip -S//2、jszip-utilsnpm install jszip-utils -S//3、pizzipnpm install pizzip -S//4、FileSaver
npm install file-saver --save

二、創建word模版

也就是編輯一個word文檔,文檔中需要動態取值的地方用{變量}取值;表格數據可以進行循環,以{#數組變量名}開始,以{/數組變量名}結束,如果數組變量是字符串而非對象則{#table}{.}{/table}。圖片以{%圖片base64變量名}展示,{%%圖片base64變量名}表示圖片居中。word模版放在public下。

word模版占位符用法

三、導出方法

//導入包
import PizZip from 'pizzip'
import docxtemplater from 'docxtemplater'
import JSZipUtils from 'jszip-utils'
import { saveAs } from 'file-saver'data() {return {form: {userName: "杰克",value: "666", },// 表格信息tableData: [],//圖片img1: '',img2: ''};
},methods:{
// 導出echarts圖片,格式轉換,官方自帶,不需要修改
base64DataURLToArrayBuffer(dataURL) {const base64Regex = /^data:image\/(png|jpg|svg|svg\+xml);base64,/;if (!base64Regex.test(dataURL)) {return false;}const stringBase64 = dataURL.replace(base64Regex, "");let binaryString;if (typeof window !== "undefined") {binaryString = window.atob(stringBase64);} else {binaryString = new Buffer(stringBase64, "base64").toString("binary");}const len = binaryString.length;const bytes = new Uint8Array(len);for (let i = 0; i < len; i++) {const ascii = binaryString.charCodeAt(i);bytes[i] = ascii;}return bytes.buffer;
},
// 點擊導出word
exportWord() {//這里要引入處理圖片的插件,下載docxtemplater后,引入的就在其中了var ImageModule = require('docxtemplater-image-module-free');var fs = require("fs");const expressions = require("angular-expressions");let _this = this;// 讀取并獲得模板文件的二進制內容,放在項目中即可(wordTemplate.docx是public文件下的word模版)JSZipUtils.getBinaryContent("wordTemplate.docx", function(error, content) {if (error) {throw error;};expressions.filters.size = function (input, width, height) {return {data: input,size: [width, height],};};function angularParser(tag) {const expr = expressions.compile(tag.replace(/’/g, "'"));return {get(scope) {return expr(scope);},};}// 圖片處理let opts = {}opts = { centered: false };opts.getImage = (chartId)=> {return _this.base64DataURLToArrayBuffer(chartId);}opts.getSize = function(img, tagValue, tagName) {console.log(tagName)//自定義指定圖像大小,此處可動態調試各別圖片的大小if (tagName === "chartImg1") return [249,200];return [300,200];}// 創建一個PizZip實例,內容為模板的內容let zip = new PizZip(content);// 創建并加載docxtemplater實例對象let doc = new docxtemplater();// 去除未定義值所顯示的undefineddoc.setOptions({nullGetter: function() { return ""; }});doc.attachModule(new ImageModule(opts));doc.loadZip(zip);// 設置模板變量的值(鍵是word模版中用的值,值是vue文件data中的變量)doc.setData({..._this.form,table: _this.tableData,img1: _this.img1,img2: _this.img2});try {// 用模板變量的值替換所有模板變量doc.render();} catch (error) {// 拋出異常let e = {message: error.message,name: error.name,stack: error.stack,properties: error.properties};console.log(JSON.stringify({ error: e }));throw error;}// 生成一個代表docxtemplater對象的zip文件(不是一個真實的文件,而是在內存中的表示)let out = doc.getZip().generate({type: "blob",mimeType:"application/vnd.openxmlformats-officedocument.wordprocessingml.document"});// 將目標文件對象保存為目標類型的文件,并命名saveAs(out, "測試.docx");});
},
}

ECHARTS圖表的圖片并轉為base64格式,在圖表加載完成時

this.img2 = myChart2.getDataURL({pixelRatio: 2,      // 導出的圖片分辨率比例,默認為 1。backgroundColor: '#fff'   // 導出的圖片背景色,默認使用 option 里的 backgroundColor
});

如果是需要動態添加的背景圖,可以直接將圖片的base64碼賦值給img1變量。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/40960.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/40960.shtml
英文地址,請注明出處:http://en.pswp.cn/news/40960.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【JAVA】數組練習

? 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主頁&#xff1a;小胡_不糊涂的個人主頁 &#x1f4c0; 收錄專欄&#xff1a;淺談Java &#x1f496; 持續更文&#xff0c;關注博主少走彎路&#xff0c;謝謝大家支持 &#x1f496; 數組練習 1. 數組轉字符串2. 數組拷貝3.…

arm-linux-gnueabihf-g++ gcc編譯、優化命令 匯總

gcc優化選項&#xff0c;可在編譯時間&#xff0c;目標文件長度&#xff0c;執行效率三個維度&#xff0c;進行不同的取舍和平衡。 gcc 常用編譯選項 arm-linux-gnueabihf-g -O3 -marcharmv7-a -mcpucortex-a9 -ftree-vectorize -mfpuneon -mfpuvfpv3-fp16 -mfloat-abihard -…

js的FileSaver.saveAs()方法:監聽保存進度,進度條等方法

在使用FileSaver.saveAs保存表格到本地時&#xff0c;如果想要獲取導出/保存進度可以如下操作 FileSaver.js的saveAs()方法是一個異步操作&#xff0c;它將文件保存到用戶設備上。在調用saveAs()方法后&#xff0c;可以通過使用回調函數、Promise、或監聽相關事件來確定saveAs(…

在vue中使用swiper輪播圖(搭配watch和$nextTick())

在組件中使用輪播圖展示圖片信息&#xff1a; 1.下載swiper,5版本為穩定版本 cnpm install swiper5 2.在組件中引入swiper包和對應樣式&#xff0c;若多組件使用swiper&#xff0c;可以把swiper引入到main.js入口文件中&#xff1a; import swiper/css/swiper.css //引入swipe…

SpringBoot系列---【SpringBoot在多個profiles環境中自由切換】

SpringBoot在多個profiles環境中自由切換 1.在resource目錄下新建dev&#xff0c;prod兩個目錄&#xff0c;并分別把dev環境的配置文件和prod環境的配置文件放到對應目錄下&#xff0c;可以在配置文件中指定激活的配置文件&#xff0c;也可以默認不指定。 2.在pom.xml中最后位置…

07微服務的事務管理機制

一句話導讀 在單體應用程序中&#xff0c;事務通常是在單個數據庫或單個操作系統中管理的&#xff0c;而在微服務架構中&#xff0c;事務需要跨越多個服務和數據庫&#xff0c;這就使得事務管理變得更加復雜和困難。 目錄 一句話導讀 一、微服務事務管理的定義和意義 二、微…

Layui列表表頭去掉復選框改為選擇

效果&#xff1a; 代碼&#xff1a; // 表頭復選框去掉改為選擇 $(".layui-table th[data-field"0"] .layui-table-cell").html("<span>選擇</span>");

做好以下幾點,可以讓我們延長周末體驗感,好好放松!!!

工作以后常常容易感到疲于奔命&#xff0c;讓我們找到適合自己方式&#xff0c;來讓我們度過一個充實放松的周末! 方向一&#xff1a;分享你周末的時間規劃 我們可以把每個月當做一個周期&#xff0c;制定一個簡單的計劃&#xff0c;如&#xff1a;第一周&#xff0c;鍛煉身體…

基于Prometheus監控Kubernetes集群

目錄 一、環境準備 1.1、主機初始化配置 1.2、部署docker環境 二、部署kubernetes集群 2.1、組件介紹 2.2、配置阿里云yum源 2.3、安裝kubelet kubeadm kubectl 2.4、配置init-config.yaml 2.5、安裝master節點 2.6、安裝node節點 2.7、安裝flannel、cni 2.8、部署測…

Go 1.21新增的內置函數(built-in functions)詳解

Go 1.21新增的內置函數分別是 min、max 和 clear&#xff0c;接下來看下這幾個函數的用途和使用示例。 在編程過程中&#xff0c;需要知道一組值中的最大或最小值的場景是很常見的&#xff0c;比如排序、統計等場景。之前都需要自己寫代碼來實現這個功能&#xff0c;現在 Go 1…

低成本無刷高速吹風機單片機方案

高速吹風機的轉速一般是普通吹風機的5倍左右。一般來說&#xff0c;吹風機的電機轉速一般為2-3萬轉/分鐘&#xff0c;而高速吹風機的電機轉速一般為10萬轉/分鐘左右。高轉速增加了高風速。一般來說&#xff0c;吹風機的風力只有12-17米/秒&#xff0c;而高速吹風機的風力可以達…

安卓獲取當前的IP地址

文章目錄 獲取IP地址完整示例代碼 獲取IP地址 在安卓中&#xff0c;我們使用靜態方法NetworkInterface.getNetworkInterfaces() 來獲取當前設備上所有的網絡接口。 網絡接口是指設備上用于進行網絡通信的硬件或軟件。這些接口可以是物理接口&#xff08;如以太網接口、無線網…

使用Docker搭建MySQL主從復制(一主一從)

Docker安裝MySQL docker pull mysql:5.7 docker images mysql安裝步驟 1.新建主服務器容器實例3307 docker run -p 3307:3306 --name mysql-master -v /usr/local/docker/mysql5.7/data/mysql-master/logs:/var/log/mysql -v /usr/local/docker/mysql5.7/data/mysql-master/…

Day 31 C++ STL常用算法(下)

文章目錄 常用拷貝和替換算法copy——容器內指定范圍的元素拷貝到另一容器中函數原型注意——利用copy算法在拷貝時&#xff0c;目標容器要提前開辟空間示例 replace——將容器內指定范圍的第一個舊元素修改為新元素函數原型注意——replace只會替換區間內滿足條件的第一個舊元…

cve-2016-7193:wwlib 模塊堆數據結構溢出

簡介 漏洞編號&#xff1a;cve-2016-7193漏洞類型&#xff1a;堆溢出軟件名稱&#xff1a;Office模塊名稱&#xff1a;wwlib歷史漏洞&#xff1a;較多影響的版本 攻擊利用&#xff1a;APT 攻擊利器-Word 漏洞 CVE-2016-7193 原理揭秘 操作環境 系統&#xff1a;Win10 1607軟…

C++ 動態內存

C 動態內存 C 程序中的內存分為兩個部分&#xff1a; 棧&#xff1a;在函數內部聲明的所有變量都將占用棧內存堆&#xff1a;這是程序中未使用的內存&#xff0c;在程序運行時可用于動態分配內存 很多時候&#xff0c;無法提前預知需要多少內存來存儲某個定義變量中的特定信…

【Docker報錯】docker拉取鏡像時報錯:no such host

報錯信息 [rootSoft soft]# docker pull mysql Using default tag: latest Error response from daemon: Head "https://registry-1.docker.io/v2/library/mysql/manifests/latest": dial tcp: lookup registry-1.docker.io on 192.168.80.2:53: no such host解決方法…

3D模型格式轉換工具如何與Parasolid集成?

概述 HOOPS Exchange包括一個 Parasolid 連接器&#xff0c;它允許 Parasolid 開發人員輕松地將 CAD 數據導入到活動的 Parasolid 會話中。如果源數據基于 Parasolid&#xff08;NX、Solid Edge 或 SolidWorks&#xff09;&#xff0c;則數據將按原樣導入。 這意味著您可以假…

主數據管理案例-某政務

1、 背景介紹及難點分析 近年來&#xff0c;我國在大數據發展方面持續發力&#xff0c;取得了明顯成效。但也要看到&#xff0c;目前我國大數據發展還存在“孤島化”“碎片化”等問題&#xff0c;無序參與過度與創新參與不足并存&#xff0c;導致大數據資源配置統籌不&#xff…

【C++】list容器

1.list基本概念 2.list構造函數 #include <iostream> using namespace std;#include<list> //鏈表list容器構造函數//輸出list鏈表 void printList(const list<int>& L) {for (list<int>::const_iterator it L.begin(); it ! L.end(); it){cout &…