用docxtemplater插件,前端实现html导出word文档(可导出文字、表格、图片)

下面我用的是vue框架,用其他框架同理,只要这个插件能兼容就行

官方文档https://docxtemplater.com/

参考地址https://www.cnblogs.com/zmh-980509/p/15480113.html

一、下载插件并引入

// 下载名字与导入名字相同,照着npm/yarn
import JSZipUtils from 'jszip-utils';
import PizZip from 'pizzip';
import docxtemplater from 'docxtemplater'; //导出word文档的插件
import { saveAs } from 'file-saver';
import ImageModule from 'docxtemplater-image-module-free'; //导出图片才需要这个插件

二、设置模板

需要在public路径下设置一个word的标准模板文件(也可以在其它路径,后面导入正确即可),内容例如:

需要导出的变量格式如下,其中,字体样式,如字体大小加粗等可以直接在word表中设置;图片宽高需在js里设置:

普通变量 {params}

循环 {#List} {params} {/List}

图片 {%imgUrl}

三、主要内容

主要用到的方法,注意要点基本都在备注里面。

exportWord() {JSZipUtils.getBinaryContent('/docTemp/xxxxx.docx', (error, content) => {//'/docTemp/xxxxx.docx'为模板的地址const zip = new PizZip(content);let doc = new docxtemplater();doc.loadZip(zip);//处理图片 开始const opts = {};// opts.centered = true; // 图片居中opts.fileType = 'docx';opts.getImage = chartId => {return this.base64DataURLToArrayBuffer(chartId);};opts.getSize = function(byteLength, url, name) {// 可根据name不同分别设置图片的宽高//if (name == 'lastPanoUrl' || name == 'panoUrl') {//  return [280, 180];//} else if (name == 'posUrl') {//  return [300, 230];//} else {//  return [180, 110];//}return [200, 120];};let imageModule = new ImageModule(opts);doc.attachModule(imageModule);//处理图片 结束});//自定义导入表中的变量let baseInfo = {params: 'xxxx',List: [{}, {}, {}],imgUrl: '' //图片需为base64地址};doc.setData(baseInfo); //baseInfo为导入表中的变量,键值都可以自己定义try {doc.render();} catch (error) {const e = {message: error.message,name: error.name,stack: error.stack,properties: error.properties};throw error;}const out = doc.getZip().generate({type: 'blob',mimeType: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'});saveAs(out, '无居民海岛无人机巡查简报.docx'); //导出的word文档名字},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;}

注意:图片地址需转换成base64

UrlToBase64(url, callback) {let image = new Image();//解决跨域问题image.setAttribute('crossOrigin', 'anonymous');image.src = url;image.onload = () => {var canvas = document.createElement('canvas');canvas.width = image.width;canvas.height = image.height;var context = canvas.getContext('2d');context.drawImage(image, 0, 0, image.width, image.height);var quality = 0.8;var dataURL = canvas.toDataURL('image/png', quality);callback && callback(dataURL); //回调函数的参数就是base64类型字符串};},

最后,有图片的话导出比较久(因为用canvas原宽高转base64,所以导出的图片比较大),如果想优化word导出,应该还是要前后端一起配合。

有错误欢迎指正,最后更新2023.1.11

只涉及前端,将html页面导出成word文档相关推荐

  1. 前端报表导出成word文档(含echarts图表)

    前端报表导出成word文档(含echarts图表) 一.问题背景: 前端vue做的各种维度的报表,原来是通过前端整体截屏导出成PDF,但部分报表在遇到跨页时会被截断,客户体验极差.然后又考虑客户可能需 ...

  2. 实现vue页面下载成word文档

    首先需要两个js文件,jquery.wordexport.js 和 FileSaver.js,源码放在下面 // jquery.wordexport.jsif (typeof jQuery !== ' ...

  3. WEB页面导出为Word文档后分页横向打印的方法

    < html >      < HEAD >          < title >WEB页面导出为Word文档后分页&横向打印的方法  </ titl ...

  4. CAD图纸如何免费导出成Word文档?

    我们在日常操作CAD图纸的过程中经常会遇到格式转换的问题,比如将图纸转成Word?有哪些转换方法可以操作呢?需要再安装其他转换工具吗? 如果我们日常需要查看或编辑CAD图纸,那么一定已经安装过相关的C ...

  5. PHP导出成word文档

    文章转载:脚本之家 链接:https://www.jb51.net/article/157904.htm 作者:cywu https://mp.weixin.qq.com/s/OV33WGPgnjx7 ...

  6. phpword 利用phpword将信息导出成word文档进行下载

    前几天需要一个功能,就是把填写得信息(文字图片)导出到word,对于我这个小白来说无比的艰难,幸好有前辈得帮助.也希望能帮助更多的人~ 首先下载phpword  https://download.cs ...

  7. 前端实现HTML导出为word文档

    需求:将页面或者页面上所需要的部分导出为word文档 基本导出 修改样式 修改图片大小 修改导出文档名称 修改导出默认方式 准备工作: jquery FileSaver.js jquery.worde ...

  8. html格式图片可以转换成word文档,html网页转换成word文档,转换成功,并且可以保存图片,但是总是为web版式的格式,怎么改成“页面”格式,多谢...

    当前位置:我的异常网» C# » html网页转换成word文档,转换成功,并且可以保存图 html网页转换成word文档,转换成功,并且可以保存图片,但是总是为"web版式"的格 ...

  9. 为什么html转为word之后图片,html网页转换成word文档,转换成功,并且可以保存图片,但是总是为web版式的格式,怎么改成“页面”格式,多谢...

    html网页转换成word文档,转换成功,并且可以保存图片,但是总是为"web版式"的格式,怎么改成"页面"格式,多谢 html网页转换成word文档,转换成功 ...

最新文章

  1. React+dva+webpack+antd-mobile 实战分享(二)
  2. centos6.8 配置 tomcat
  3. 【考研】2022温州大学计算机学硕招收调剂
  4. leaflet加载离线地图教程以及下载离线地图瓦片工具
  5. 设计模式:单例模式的写法(基础写法和线程安全写法)
  6. F - Prime Path
  7. 《矩阵与变换》教学中的几个“务必”
  8. PAT (Basic Level) Practice1024 科学计数法
  9. 单片机音频谱曲软件_51单片机蜂鸣器音乐简谱转换工具
  10. 宝塔/Linux下自动更新maccms到github原版的最新版
  11. 概率论与数理统计(一):教你一步步推贝叶斯公式
  12. 微信小程序 自定义底部导航栏
  13. 卡巴斯基半年激活码免费申请
  14. 当浏览器默认禁用第三方cookie
  15. 关于非诚勿扰百度专场
  16. MSYS2使用教程——win10系统64位安装msys2最新版(msys2-x86_xxxx.exe)
  17. 7-2 列出连通集 (25分)
  18. CAD软件中文本如何屏蔽
  19. Java8 Stream的用法
  20. Putty的使用及登录

热门文章

  1. 钉钉直播视频下载方法分享地瓜网络技术
  2. 贝聊SQL自动审核系统
  3. 利用python爬取58同城简历数据
  4. 看懂联想服务器系列产品分类(上)
  5. “请家堂”的旧习俗不是封建迷信
  6. uni-app 预览并使用模板
  7. Android界面特殊全汇总
  8. 绝地求生服务器维护错误,哪些是绝地求生常见异常解决方案?
  9. 安装宝塔 linux centos7.5 mysql redis nginx 安装环境
  10. 权威发布 | 芝诺数据入选2023年重庆市数字经济产业发展试点示范项目