vue + docxtemplater 实现前端生成并下载word


文章目录

  • vue + docxtemplater 实现前端生成并下载word
  • 前言
    • 平时工作中需要将多条数据以word形式下载,手动去实现太麻烦,耗时又耗力,然后在网上查了下,发现有符合我需求的插件,记录一下实现过程。
  • 一、docxtemplater介绍
    • 基础语法
  • 二、使用步骤(包含图片)
    • 1.导入包
    • 2.页面引用
    • 3.制作模板
    • 4.实现代码
  • 总结

前言

平时工作中需要将多条数据以word形式下载,手动去实现太麻烦,耗时又耗力,然后在网上查了下,发现有符合我需求的插件,记录一下实现过程。

一、docxtemplater介绍

docxtemplater是一款强大的 Word、Powerpoint 和 Excel生成插件,它以编程方式使用并处理条件、循环,并且可以插入图像、html或表格。

基础语法

普通标签:{name}

**循环标签(“#”开始, “/”结束)**:{#table}{/table}

图片标签:{%img}

二、使用步骤(包含图片)

1.导入包

npm install docxtemplater
npm install pizzip
npm install file-saver
npm install jszip-utils
npm install docxtemplater-image-module-free

2.页面引用

import docxtemplater from "docxtemplater";
import PizZip from "pizzip";
import JSZipUtils from "jszip-utils";
import { saveAs } from "file-saver";

3.制作模板

模板:

实现:

4.实现代码

//测试数据
let item = {nzy:'',Illegal:'',imgPath:'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',imgPath1:'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg'}
let docxData = {nzy:item.nzy,Illegal:item.Illegal,imgPath: await that.getBase64Sync(item.imgPath),  //图片转base64需要解决异步 async awaitimgPath1: await that.getBase64Sync(item.imgPath1)
}
var ImageModule = require('docxtemplater-image-module-free');   //没有图片可以去掉这一段
//*注*模板文件存放位置:vue-cli2在static文件夹下,vue-cli3在public文件夹下,文件后缀名为'.docx'
JSZipUtils.getBinaryContent('file.docx', function (error, content) {if (error) {throw error};// 图片处理开始let opts = {}opts = {//图像是否居中centered: false};opts.getImage = (chartId) => {return that.base64DataURLToArrayBuffer(chartId);}opts.getSize = function(img, tagValue, tagName) {//自定义指定图像大小return [200, 150];}//图片处理结束    没有图片可去掉这一段var zip = new PizZip(content);var doc = new docxtemplater()doc.attachModule(new ImageModule(opts));  //没有图片可以去掉这一段doc.loadZip(zip);//获取数据doc.setData({...docxData});try {doc.render()} catch (error) {var e = {message: error.message,name: error.name,stack: error.stack,properties: error.properties,}console.log(JSON.stringify({error: e}));throw error;}var out = doc.getZip().generate({type: "blob",mimeType: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",}) saveAs(out, "文件名.docx")
})
}
base64DataURLToArrayBuffer(dataURL) {const base64Regex = /^data:image\/(png|jpg|jpeg|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;}
getBase64Sync(imgUrl) {var xhr = new XMLHttpRequest();xhr.open("get", imgUrl, true);// 至关重要xhr.responseType = "blob";xhr.onload = function () {if (this.status == 200) {//得到一个blob对象var blob = this.response;console.log("blob", blob)// 至关重要let oFileReader = new FileReader();oFileReader.onloadend = function (e) {// 此处拿到的已经是 base64的图片了let base64 = e.target.result;let image = new Image();image.src = base64;let canvas = document.createElement("canvas");canvas.width = image.width;canvas.height = image.height;let context = canvas.getContext("2d");context.drawImage(image, 0, 0, image.width, image.height);//返回resolve(base64);};oFileReader.readAsDataURL(blob);}else {console.log(imgUrl)}}xhr.send();},

总结

以上就是今天要讲的内容,本文仅仅简单介绍了部分功能的使用,而docxtemplater提供了大量能使我们快速便捷地处理各类型文件的方法。
https://docxtemplater.com/docs/get-started-node/
https://www.jianshu.com/p/0de31429b12a

vue + docxtemplater 实现前端生成并下载word相关推荐

  1. vue:实现前端生成并下载二维码(使用qrcodejs2插件)

    需求 点击按钮下载二维码,并命名为"奶绿走糖-二维码". HTML <button @click="getPersonCode()">下载二维码&l ...

  2. vue如何在线预览及下载word文档

    最近遇到个需求,说要在线预览及下载word文档,尝试了很多方法以后,发现有一个方法是比较好用的,故来分享一波,希望大家也可以在评论中告知更多实现的方法~ https://view.officeapps ...

  3. 前端生成、下载二维码

    前台生成.下载二维码 点击查看按钮,弹出二维码弹框 查看按钮 <el-button type="text" @click="useqrcode(scope.row) ...

  4. 【xlsx+vue】前端生成可下载的xlsx表格

     组件引入: <script type="text/javascript" src="./xlsx.core.min.js"></script ...

  5. php实现生成并下载word文件到本地

    要给最常用出租屋管理系统增加个合同功能,mark下知识点.要生成合同就需要使用phpword. 安装phpword包 通过composer安装phpword包.因为是使用thinkphp架构,安装挺方 ...

  6. 前端生成pdf 下载

    前端实现HTML转PDF下载的两种方式 - 简书 方式一:使用html2canvas和jspdf插件实现 该方式是通过html2canvas将HTML页面转换成图片,然后再通过jspdf将图片的bas ...

  7. vue 中通过 ajax 生成form 下载表格

    recordsClick(){ //导出表格 var params = {// 参数 smartWatermeterId: this. $route. query. watermeterId, sta ...

  8. Java预览下载word文档(poi-tl、thymeleaf模板)

    主要功能 预览word文档 生成并下载word文档 实现 前端Vue代码 预览功能主要使用的是docx-preview下载方式如下: npm install docx-preview --save & ...

  9. 纯前端vue利用docxtemplater实现生成word文档下载 word模板,勾选框的默认勾选。。

    首先需要下载如下工具: cnpm i docxtemplater pizzip jszip-utils file-saver -S 然后将它们引入: import JSZipUtils from &q ...

最新文章

  1. 在asp.net(C#)中怎么获得一个目录的大小?
  2. 国际化(1)---JS文件国际化
  3. php连接到mysql数据库,PHP MySQL:连接到MySQL数据库
  4. FTP使用外部数据源
  5. stm32F205程序移植到stm32F405片子,使用FPU时注意事项
  6. 腾讯/京东/网易校招笔试刷人超70%,这份笔试自救指南请收好
  7. 【已解决】Object of type ’int64‘ is not JSON serializable python
  8. 从零开始做运营 进阶篇
  9. git: Cannot communicate securely with peer: no common encryption algorithm(s)
  10. D3D9 简单图形的绘制以及显示
  11. 云计算如何运用在政府行业--解决方案
  12. Science重磅:颠覆教科书!科学家找到癌症发生源头,治愈肿瘤有了新思路
  13. 在浏览器输入url回车后发生了什么
  14. echo命令详细解析(linux中超级详细,图文展示)
  15. stm32f105vct6例程_STM32F105VCT6
  16. GitHub上README.md排版样式教程
  17. 时间戳转成日期,解决日期1970年的问题
  18. H3C基础配置学习笔记1-端口配置
  19. 企业增长过程中的「伪命题」
  20. 手机密码用计算机怎么解锁,手机忘记开机密码怎么办,有这四招1分钟就搞定...

热门文章

  1. win11下Jenkins安装及配置
  2. Redis主从同步原理
  3. iOS 股票K线图绘制
  4. 抽象语法树 c语言,一个简单的例子看懂抽象语法树的魔力
  5. 如何去掉网页复制到word后的黑(或灰)背景色
  6. 在网页中制作icon图标
  7. 腾讯云轻量快速搭建个人网盘
  8. IQA图像质量评价常用评价指标
  9. 自组织神经网络:Kohonen网络训练算法
  10. 如何把代码优雅的插入word