vue、echarts、html-docx-js-typescript、file-saver、dom-to-image将页面下载成word、图片并下载(纯前端)

需求中描述是要将一个页面下载成word文档,研究了个demo测试一下。
1、下载依赖

npm install html-docx-js-typescript --save-dev
npm install  file-saver  --save-dev
npm install  dom-to-image  --save-dev

2、在调用的页面导入

import domtoimage from 'dom-to-image'
import { asBlob } from 'html-docx-js-typescript'
import { saveAs } from 'file-saver'

3、界面中调用js

exportWord (dom) {
      const node = document.getElementById(dom) // 通过id获取dom  任意节点都可以
      domtoimage
        .toPng(node)
        .then((dataUrl) => {
        //这里的htmlString可以自定义一些word模板来将页面的dom转化从而达到将界面上的高度还原到word中 echarts保存成图片放进来即可dataUrl    
          const htmlString = `
                  <!DOCTYPE html>  
                  <html lang="en">  
                    <head> 
                      <meta charset="UTF-8"> 
                      <title>Document</title>  
                    </head>        
                    <body>     
                        <div>Word标题</div>  
                        <div>  
                              <img width="850" height="500" src="${dataUrl}"/>  
                        </div> 
                    </body>                
                  </html>`
          const opt = {
            orientation: 'landscape'
          }
          asBlob(htmlString, opt).then(data => {
            saveAs(data, 'file.docx') // save as docx file
          })
        })
        .catch(function (error) {
          console.error('oops, something went wrong!', error)
        })
    },

保存成图片下载到本地

// 截图并下载
    shotPic (domId, name) {
      const node = document.getElementById(domId) // 通过id获取dom
      domtoimage
        .toPng(node)
        .then((dataUrl) => {
          // 输出图片的Base64,dataUrl
          // 下载到PC
          const a = document.createElement('a') // 生成一个a元素
          const event = new MouseEvent('click') // 创建一个单击事件
          a.download = `${name}` // 设置图片名称没有设置则为默认
          a.href = dataUrl // 将生成的URL设置为a.href属性
          a.dispatchEvent(event) // 触发a的单击事件
        })
        .catch(function (error) {
          console.error('oops, something went wrong!', error)
        })
    },
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值