vue 导出word文档(包括图片)

vue导出word表格随记 阅读详情

vue 导出word文档(包括图片)

1.打开终端,安装依赖

-- 安装 docxtemplater
npm install docxtemplater pizzip  --save

-- 安装 jszip-utils
npm install jszip-utils --save 

-- 安装 jszip
npm install jszip --save

-- 安装 FileSaver
npm install file-saver --save

-- 安装 angular-expressions
npm install angular-expressions --save

-- 安装 image-size
npm install image-size --save

2.创建exportFile.js文件(导出word方法)
文件存放目录自定义

import PizZip from 'pizzip'
import docxtemplater from 'docxtemplater'
import JSZipUtils from 'jszip-utils'
import { saveAs } from 'file-saver'
 
/**
 * 将base64格式的数据转为ArrayBuffer
 * @param {Object} dataURL base64格式的数据
 */
function 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;
}
 
/**
 * 导出word,支持图片
 * @param {Object} tempDocxPath 模板文件路径
 * @param {Object} wordData 导出数据
 * @param {Object} fileName 导出文件名
 * @param {Object} imgSize 自定义图片尺寸
 */
export const exportWord = (tempDocxPath, wordData, fileName, imgSize) => {
  // 这里要引入处理图片的插件
  var ImageModule = require('docxtemplater-image-module-free');
 
  const expressions = require("angular-expressions");
 
  // 读取并获得模板文件的二进制内容
  JSZipUtils.getBinaryContent(tempDocxPath, 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) => {
      // console.log(chartId);//base64数据
      // 将base64的数据转为ArrayBuffer
      return base64DataURLToArrayBuffer(chartId);
    }
 
    opts.getSize = function (img, tagValue, tagName) {
      // console.log(img);//ArrayBuffer数据
      // console.log(tagValue);//base64数据
      // console.log(tagName);//wordData对象的图像属性名
      // 自定义指定图像大小
      if (imgSize.hasOwnProperty(tagName)){
        return imgSize[tagName];
      } else {
        return [600, 350];
      }
    }
 
    // 创建一个PizZip实例,内容为模板的内容
    let zip = new PizZip(content);
    // 创建并加载docxtemplater实例对象
    let doc = new docxtemplater();
    doc.attachModule(new ImageModule(opts));
    doc.loadZip(zip);
 
    doc.setData(wordData);
 
    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, fileName);
  });
}

3.组件调用
注意:引用文件的路径是你创建文件的路径

<template>
  <a-form-model
    ref="ruleForm"
    :model="form"
    :rules="rules"
    :label-col="labelCol"
    :wrapper-col="wrapperCol"
  >
    <a-form-model-item label="名称" prop="name">
      <a-input-number v-model="form.name" style="width:100%;"/>
    </a-form-model-item>
    <a-form-model-item label="日期" prop="date">
      <a-input v-model="form.date" />
    </a-form-model-item>
    <a-form-model-item label="文件">
      <a-input v-model="form.imgUrl" read-only/>
      <a-upload name="file" :showUploadList="false" :customRequest="customRequest">
        <a-button type="primary" icon="upload">导入图片</a-button>
      </a-upload>
    </a-form-model-item>
    <a-form-model-item label="操作">
      <a-button type="primary" icon="export" @click="exportWordFile">导出word文档</a-button>
    </a-form-model-item>
  </a-form-model>
</template>
<script>
import {exportWord} from '@/assets/js/exportFile.js'
export default {
  name: 'ExportFile',
  data () {
    return {
      labelCol: { span: 6 },
      wrapperCol: { span: 16 },
      form: {},
      rules: {
        name: [
          { required: true, message: '请输入名称!', trigger: 'blur' },
        ],
        date:[
          { required: true, message: '请输入日期!', trigger: 'blur' },
        ],
      },
    };
  },
  created (){},
  methods: {
    customRequest (data){
      //图片必须转成base64格式
      var reader = new FileReader();
      reader.readAsDataURL(data.file);
      reader.onload = () => {
        // console.log("file 转 base64结果:" + reader.result);
        this.form.imgUrl = reader.result; //imgUrl必须与模板文件里的参数名一致
      };
      reader.onerror = function (error) {
        console.log("Error: ", error);
      };
    },
    exportWordFile (){
      let imgSize = {
        imgUrl:[65, 65], //控制导出的word图片大小
      };
      exportWord("./static/test.docx", this.form, "demo.docx", imgSize);
      //参数1:模板文档 
      //参数2:字段参数
      //参数3:输出文档
      //参数4:图片大小
    }
  },
};
</script>

4.创建test.docx文档模板。注:使用vue-cli2的时候,放在static目录下;使用vue-cli3的时候,放在public目录下。
模板参数名需与字段一致,普通字段:{字段名},图片字段:{%字段名}
文档内容:
在这里插入图片描述

5.导出demo.docx结果展示:
在这里插入图片描述
在这里插入图片描述

前端(vue)导出word文档(导出图片) 导出word文档方法有很多,但这次要导出图片,所以选用了html-docx html-docx是根据html代码进行导出........ 阅读详情

相关推荐

vue页面导出Word文档(含图片)

Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。与其他庞大的框架不同,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,也便于与第三方库或已有项目整合。另一方面,当与现代化的工具和库结合使用时,Vue 也完全能够构建复杂单页应用。组件系统:Vue.js 使用组件系统来构建应用。组件是可复用的 Vue 实例,具有自己的作用域,可以包含模板、数据、样式等。响应式数据绑定:Vue 会自动跟踪依赖关系并在数据变化时更新视图。

日常笔记/总结/系列知识梳理 1万+

vue实现导出word文档(含多张图片)

vue实现导出word文档(含多张图片)

zhanglinsen123的博客 1万+

VUE动态生成word的实现

主要介绍了VUE动态生成word的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

vue导出word

vue导出word

qq_46372045的博客 9378

FLUENT UDF编译及蒸发冷凝相关问题

蒸发冷凝与相间传质

weixin_48029137的博客 1万+

SpringBoot Actuator未授权访问漏洞实战:从发现到利用

本文深入剖析了SpringBoot Actuator未授权访问漏洞的成因、危害与利用手法。文章详细演示了如何发现暴露的端点,并通过实战案例复现了从敏感信息泄露到利用反序列化漏洞实现远程代码执行(RCE)的全过程,为开发与运维人员提供了从漏洞发现到修复加固的完整安全指南。

weixin_29231221的博客 260

vue导出word文档docxtemplater,包括图片输出和角度筛选器

vue导出word文档docxtemplater,包括图片输出和角度筛选器首先需要引入一些包参考地址文档中这样写主要代码 首先需要引入一些包 import docxtemplater from ‘docxtemplater’ //word文档生成 import JSZipUtils from ‘jszip-utils’ import PizZip from ‘pizzip’ import {saveAs} from ‘file-saver’ //输出文件流 import ImageModule fr

HZHEN123的博客 7373

fMRI数据处理:从DICOM到NIFTI(上)

哈喽,这里是系列fMRI数据处理文章专栏。包括从核磁拷贝完DICOM格式的文件,到整理数据,检查数据,数据预处理,后续分析等等内容。如果你是一个初学者,特别是心理学或者是刚踏入认知神经科学的小白,那么这个专栏可以帮助你从头到尾完成数据处理直到结果的可视化。如果你已经进入了认知神经科学领域,这里面的内容可能过于细致,并且找不到你想要的答案,不过可以在帖子下留言评论,欢迎大家提供宝贵的意见!如果是医学相关,可能这些内不太准确或专业,谨慎参考!

weixin_44933894的博客 2482

使用Vue导出word(纯前端,异步处理图片)

项目需要导出word,于是乎又是查阅资料。然后自己写。 参考链接 https://github.com/evilc0des/docxtemplater-image-module-free https://www.jianshu.com/p/b3622d6f8d98 Vue导出Word 配置word模板 新建一个word文档,名字随便取只要对应就好,我创建的是一个template.docx。下面是我的配置,简单解释一下: 1. {#wordList}包裹一个循环对象{/wordList} 2. 对象中有se

阿進在努力~~ 2313

别再纠结高侧低侧了!用INA199/INA219这类集成电流检测芯片,5分钟搞定精准电流测量

本文详细解析了使用INA199/INA219等集成电流检测芯片实现精准电流测量的高效方案。通过对比传统分立元件方案,突出集成芯片在精度、温度稳定性和设计简化方面的优势,并提供硬件设计避坑指南和软件实现最佳实践,帮助开发者快速掌握电流检测技术。

weixin_42685438的博客 471

AI气象预报:数值模式融合与短临预警的工程实践

气象预报正经历从物理推演到数据驱动的认知范式转变。AI气象预报并非替代传统数值模式,而是通过数值模式融合弥补其在参数化误差、初值敏感性和计算效率上的固有瓶颈。其技术价值在于提升短临预警时效性与空间精度,支撑航空调度、电力调控、防洪应急等关键场景。实践中需兼顾物理一致性、可解释性与业务系统兼容性,避免纯黑箱建模带来的外推失效与不确定性缺失风险。本文聚焦AI作为超分辨率引擎、误差矫正器和短临加速器的三类落地路径,解析HEALPix投影、多尺度图建模、轻量级U-Net等核心适配方法。

weixin_28221501的博客 298

vue导出Word(包含echarts)

vue导出Word(包含echart)纯小白一步步填坑去学vue导出Word导入安装包创建模板echart图片处理功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 纯小白一步步填坑去学vue导出Word 因为公司做的是阅卷系统,最近

target_for的博客 3690

OpenHarmony开发一个App,安装到BearPi-HM Micro开发板

建议先阅读我们这篇,这里面详细介绍了,以及hap包安装的全过程。本篇是介绍如何开发一个App,然后安装到开发板上,比如hap包,无法安装等问题。

Halifax 1030

vue +echarts+ docxtemplater导出word和多张图表图片

vue +echarts+ docxtemplater导出word和多张图表图片前期准备 前期准备 1、按照依赖的插件docxtemplater、pizzip、jszip-utils、jszip、FileSaver、docxtemplater-image-module-free。 //-- 安装 docxtemplater npm install docxtemplater pizzip --save //-- 安装 jszip-utils npm install jszip-utils --save

qq_36022231的博客 5528

3D扩散模型的构建与优化:多模态融合在三维物体生成中的作用【附核心代码实例】

随着技术的发展,基于扩散模型的3D内容生成已经成为一个激动人心的领域。通过不断优化扩散模型的结构和算法,结合多模态信息、视角控制和高效网络架构,未来的3D生成技术将不仅能够生成逼真的物体,还能满足虚拟现实、游戏设计、电影制作等行业对高质量、实时生成的需求。

一键难忘的博客 2863

车载以太网测试-1【TC8物理层测试基础】

车载以太网物理层是车载网络的基础,负责将数字数据转换为适合在物理介质上传输的信号,并确保数据传输的可靠性、稳定性和高效性。它在车载网络系统中扮演着至关重要的角色,直接影响着车辆内部通信的性能和效率。1. 主要物理层标准车载以太网标准由IEEE 802.3和标准名称速率线缆类型编码方式应用场景100BASE-T1100 Mbps单对非屏蔽双绞线车载摄像头、传感器1 Gbps单对屏蔽/非屏蔽双绞线自动驾驶域控制器、高清视频10BASE-T1S10 Mbps单对双绞线幅移键控(ASK)

车载网络测试工程师的博客 4392

vue导出word 包含图片和qrcode

1.定义方法文件 world.js import PizZip from "pizzip"; import Docxtemplater from "docxtemplater"; import JSZipUtils from "jszip-utils"; import { saveAs } from "file-saver"; /** * 将base64格式的数据转为ArrayBuffer * @param {Object} dataURL base64格式的数据 */ func...

weixin_56881180的博客 1880

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

vue项目导出图片至word方法。

实现以下两点功能:1.导出单条数据至word中,图片还需支持多张。2.导出多条数据至zip压缩包中,并且有图片也需要导出至word中,支持多张。

geng97280的博客 1056

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【vue-echarts-docxtemplater】导出word表格和图片

vue3将表格和图表保存为word文档下载

m0_71853646的博客 3153

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

vue 导出word带图片

vue 导出word 带图片

weixin_43075758的博客 2241

vue前端实现导出页面为word(两种方法)

vue前端实现导出页面为word(两种方法)

Z18834071903的博客 1万+

vue nuxt 导出Word携带表格 表格遍历tabelData表格中包含图片

vue nuxt 导出Word携带表格 表格遍历tabelData表格中包含图片 world模板 导出效果 导入插件包 import FileSaver from 'file-saver' import JSZip from 'jszip' import ImageModule from 'docxtemplater-image-module-free' import Pizzip from 'pizzip' import Docxtemplater from 'docxtemplater' 实现过程

m0_38125257的博客 773

vue中html导出成word

参考链接:https://blog.youkuaiyun.com/weixin_47494533/article/details/137018678。vue 中将 html 中内容转换为 word 文档导出,无需模板,可以导出 echarts 图表。先将html中内容获取,之后将页面上的元素转成图片,然后把图片放到word文件中进行导出。使用 html-docx-js、file-saver。2、创建 exportToWord.js,添加导出方法。

morningttt的博客 1158

vue如何把html转换word,vue前端html导出word文档

标签:ext大小标签引入torobjectteeattribute解决1、index.html文件内引入1 scriptsrc="js/html-docx.js">script>2、在导出页面加入方法1 //导出 word 文档2 exportDocx() {3 //克隆报告HTML4 let contentDoc...

weixin_39715348的博客 3377

基于完全前端html转换成word保留原来显示的样式mhtml-to-word

本文主要参考了: 博主:芊赋予翔 https://blog.youkuaiyun.com/weixin_44956861/article/details/105029161 https://blog.youkuaiyun.com/weixin_44956861/article/details/101765177 两篇文章,十分感谢,也希望,这样实质有用能够解决问题的文章能够帮助到更多人。 先看看效果: 网页部分: 复杂的多级表格 导出结果: 方法内容主要分为一下几点: 1.(这里是我对docxtemplater的吐槽,不想看

qq_40171314的博客 1万+

vue项目保存页面为pdf 、word

vue 保存页面为pdf、word文档

qq_43987527的博客 2462
上一篇: .net core webapi execl数据导入
下一篇: .net core webapi 文件上传
Grant丶
博客等级 码龄7年 14粉丝 34原创
评论 43
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值