国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

vue導(dǎo)出word文檔(含ECharts,多圖片,表格等)

這篇具有很好參考價值的文章主要介紹了vue導(dǎo)出word文檔(含ECharts,多圖片,表格等)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

step one

package.json

安裝文件包

? ?

"docxtemplater": "^3.33.0",? //文檔模板器

"docxtemplater-image-module-free": "^1.1.1",? //免費圖片下載模塊

"file-saver": "^2.0.5",? //內(nèi)存流導(dǎo)出文件流

"jszip": "^3.10.1", //文件、圖片打包壓縮

"jszip-utils": "^0.1.0",//網(wǎng)頁壓縮軟件

"pizzip": "^3.1.4", //?文件轉(zhuǎn)為zip文件

step two?

?1.導(dǎo)入插件包

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

? 2.初始化echarts圖表時? 將echarts圖片轉(zhuǎn)為base64格式(為后續(xù)導(dǎo)出準(zhǔn)備)

    initChart(id) {
      let mychart = echarts.init(document.getElementById(id))
      mychart.setOption(statisticsOption)
      // ECHARTS圖表的圖片并轉(zhuǎn)為base64格式
      this.img1 = mychart.getDataURL({
        pixelRatio: 2, // 導(dǎo)出的圖片分辨率比例,默認(rèn)為 1。
        backgroundColor: '#fff' // 導(dǎo)出的圖片背景色,默認(rèn)使用 option 里的 backgroundColor
      })
    },

? 3.導(dǎo)出echarts圖片,格式轉(zhuǎn)換,官方自帶,不需要修改

     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
    },

?4.導(dǎo)出word 具體實現(xiàn)方法(包含發(fā)郵件,上傳到服務(wù)器)

    //點擊按鈕導(dǎo)出word (形參作為word發(fā)送到郵箱標(biāo)識 無需考慮)
    exportWord(fileExport) {
      //這里要引入處理圖片的插件,下載docxtemplater后,引入的就在其中了
      //編寫docx模板 本文后續(xù)有文檔模板語法教學(xué)
      var ImageModule = require('docxtemplater-image-module-free')
      var fs = require('fs')
      let _this = this

      // 讀取并獲得模板文件的二進(jìn)制內(nèi)容,放在項目根目錄public中即可
      JSZipUtils.getBinaryContent(
        'dataStatistics.docx',
        function (error, content) {
          if (error) {
            throw error
          }

          // 圖片處理
          let opts = {}
          opts = { centered: false }
          opts.getImage = chartId => {
            return _this.base64DataURLToArrayBuffer(chartId)
          }
          opts.getSize = function (img, tagValue, tagName) {
            //自定義指定圖像大小,此處可動態(tài)調(diào)試各別圖片的大小
            return [50, 100]  //例子:寬50px  高度100px
          }

          // 創(chuàng)建一個PizZip實例,內(nèi)容為模板的內(nèi)容
          let zip = new PizZip(content)
          // 創(chuàng)建并加載docxtemplater實例對象
          let doc = new docxtemplater()
          doc.attachModule(new ImageModule(opts))
          doc.loadZip(zip)

          // 設(shè)置模板變量的值
          doc.setData({
            ..._this.articleParams,  //詳情內(nèi)容字段(Object)
            table: _this.detailParams,  //表格內(nèi)容(Array)
            img1: _this.img1,   // echarts圖片
          })

          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文件(不是一個真實的文件,而是在內(nèi)存中的表示)
          let out = doc.getZip().generate({
            type: 'blob',
            mimeType:
              'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
          })
          //此文件流 可以傳送到后端服務(wù)器生成二進(jìn)制文件(包含上傳到阿里云服務(wù)器)
          if (fileExport == 'export') {
            let formData = new FormData() //創(chuàng)建formdata來存文件
            const chunkfile = new File([out], '數(shù)據(jù)統(tǒng)計.docx')
            formData.append('file', chunkfile) //存入文件
            formData.append('toEmailList', _this.mailForm.toEmailList)
            formData.append('customSubject', _this.mailForm.customSubject)
            //formData文件  需注意此api請求方式 下文會描述
            dataDetailsEmailApi(formData).then(res => {
              if (res.data.code == 200) {
                _this.$message.success('發(fā)送成功')
              }
            })
          } else {
             // 將目標(biāo)文件對象保存為目標(biāo)類型的文件,并命名
            saveAs(out, '數(shù)據(jù)統(tǒng)計.docx')
          }
        }
      )
    },

5.word文檔模板

vue導(dǎo)出word包含圖表,vue.js,前端,javascript,echarts,word

?step three

效果圖:

vue導(dǎo)出word包含圖表,vue.js,前端,javascript,echarts,word

vue導(dǎo)出word包含圖表,vue.js,前端,javascript,echarts,word?

?

Tips

? 1.如果有將文件流上傳到服務(wù)器需求? axios請求封裝 (請求頭)

  upLoadFileStream(url, params) {
    return new Promise((resolve, reject) => {
      axios.request({
        url: url,
        method: "post",
        data: params,
        headers: {
          'Content-type': "multipart/form-data",
          clientId: "PC",
        }
      }).then(response => {
        resolve(response)
      })
    })
  }

?2.加入想要以變量的形式上傳圖片也需要將圖片轉(zhuǎn)為base64格式去上傳

????(下方為前端實現(xiàn)圖片轉(zhuǎn)為base64方法)文章來源地址http://www.zghlxwxcb.cn/news/detail-639112.html

    creatBase64Sync(imgUrl) {
      return new Promise(function (resolve, reject) {
        // 一定要設(shè)置為let,不然圖片不顯示
        let image = new Image()
        //圖片地址
        image.src = imgUrl
        // 解決跨域問題
        image.setAttribute('crossOrigin', 'Anonymous')
        // image.setAttribute('crossOrigin', '*') // 支持跨域圖片
        // image.onload為異步加載
        image.onload = function () {
          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)
          //圖片后綴名
          let ext = image.src
            .substring(image.src.lastIndexOf('.') + 1)
            .toLowerCase()
          //圖片質(zhì)量
          let quality = 0.8
          //轉(zhuǎn)成base64
          let dataurl = canvas.toDataURL('image/' + ext, quality)
          //返回
          // console.log(dataurl)
          resolve(dataurl)
        }
      })
    },

到了這里,關(guān)于vue導(dǎo)出word文檔(含ECharts,多圖片,表格等)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【工具插件類教學(xué)】NPOI插件使用Excel表格的導(dǎo)入和導(dǎo)出(包含圖片)

    目錄 一.導(dǎo)入Excel?解析讀取 1.選擇導(dǎo)入的目標(biāo)文件 2.解析讀取導(dǎo)入的文件

    2024年01月16日
    瀏覽(33)
  • vue 前端導(dǎo)出頁面圖表保存為Html格式文檔

    vue 前端導(dǎo)出頁面圖表保存為Html格式文檔

    問題描述: 圖一 解決思路: 想要達(dá)到要求的效果,網(wǎng)上找了很久,最后記錄下2種方案: 方案一、使用html2canvas組件,html2canvas的作用就是允許我們直接在用戶瀏覽器上拍攝網(wǎng)頁或某一部分的截圖。它的屏幕截圖是基于DOM元素的,實際上它不會生成實際的屏幕截圖,而是基于

    2024年02月03日
    瀏覽(21)
  • vue導(dǎo)出word文檔(圖文示例)

    vue導(dǎo)出word文檔(圖文示例)

    第076個 查看專欄目錄: VUE 在Vue中導(dǎo)出Word文檔,可以使用第三方庫file-saver和html-docx-js。首先需要安裝這兩個庫: npm install file-saver html-docx-js --save 然后在Vue組件中使用這兩個庫來導(dǎo)出Word文檔: 要生成 DOCX,只需將 HTML 文檔(作為字符串)傳遞給 asBlob 方法以接收包含輸出文件

    2024年02月19日
    瀏覽(25)
  • vue 生成word表格文檔 前端庫介紹

    ?????????在Vue中生成Word表格文檔,你可以使用一些前端庫來幫助你完成這項任務(wù)。以下是幾個流行的庫及其簡要介紹: ????????1. **docxtemplater**: ? ?- **介紹**: docxtemplater是一個基于JavaScript的庫,它可以處理docx和pptx模板,允許你通過JSON數(shù)據(jù)來填充模板。它支持條件、

    2024年02月21日
    瀏覽(13)
  • 【Python】導(dǎo)出docx格式Word文檔中的文本、圖片和附件等

    【Python】導(dǎo)出docx格式Word文檔中的文本、圖片和附件等

    為批量批改學(xué)生在機(jī)房提交的實驗報告,我需要對所有的實驗文檔內(nèi)容進(jìn)行處理。需要批量提取Word文檔中的圖片和附件以便進(jìn)一步檢查。如何提?。课蚁氲搅擞闷饋肀容^方便的Python,經(jīng)過試驗,方案可行,故此記錄。學(xué)生的作業(yè)主要是docx或者doc文檔,學(xué)生把項目打成壓縮包

    2024年02月07日
    瀏覽(22)
  • vue 使用docx庫生成word表格文檔

    ????????在Vue.js中生成Word表格文檔,可以通過前端庫來實現(xiàn)。這些庫可以幫助我們輕松地將HTML表格轉(zhuǎn)換為Word文檔(通常是.docx格式)。以下是一些流行的前端庫,它們可以用于在Vue項目中生成Word表格文檔: ???????? ????????docx是一個流行的JavaScript庫,用于在瀏覽

    2024年02月21日
    瀏覽(20)
  • vue中實現(xiàn)將html導(dǎo)出為word文檔

    vue中實現(xiàn)將html導(dǎo)出為word文檔

    需求:將頁面整成理想樣式,將想要的那一部分頁面導(dǎo)出成word,不用寫模板,按照當(dāng)前頁面樣式導(dǎo)出即可。(簡易版) 保姆級別教程: 第一步:安裝需要的依賴 第二步:給導(dǎo)出那部分的容器起個id名 第三步:在需要的地方引入依賴 第四步:獲取dom節(jié)點myContainer并導(dǎo)出(我寫

    2024年02月11日
    瀏覽(19)
  • vue簡易導(dǎo)出word文檔——docxtemplater使用介紹

    好久不見,上班時間 時間緊急,把領(lǐng)導(dǎo)要寫的文檔寫好復(fù)制了一份發(fā)給大家(斜眼笑)。 一、下載依賴 ??二、在 public 文件夾下創(chuàng)建docx模板 如果后面步驟報錯找不到模板,打開docx文檔 另存為覆蓋 當(dāng)前文件即可。 三、新建js文件,加入導(dǎo)出實現(xiàn)代碼 四、調(diào)用頁面引入方

    2024年02月14日
    瀏覽(17)
  • vue2 若依項目,使用plotly.js-dist圖表庫,將數(shù)據(jù)圖表一鍵導(dǎo)出為圖片

    vue2 若依項目,使用plotly.js-dist圖表庫,將數(shù)據(jù)圖表一鍵導(dǎo)出為圖片

    此代碼適用的場景是一個頁面有多個數(shù)據(jù)圖表。 首先需要拿到你生成數(shù)據(jù)圖表的數(shù)據(jù), 然后賦值給一個數(shù)組,數(shù)組需要在data定義,還需要去重。 ?然后點擊導(dǎo)出按鈕的代碼如下: 單個下載可以點擊數(shù)據(jù)圖表的照相機(jī),可以實現(xiàn)單個下載。 如果數(shù)據(jù)圖表做了分頁和懶加載,無

    2024年02月12日
    瀏覽(25)
  • VUE使用docxtemplater導(dǎo)出word(帶圖片)

    VUE使用docxtemplater導(dǎo)出word(帶圖片)

    一、docxtemplater docxtemplater 是一種郵件合并工具,以編程方式使用并處理條件、循環(huán),并且可以擴(kuò)展以插入任何內(nèi)容(表格、html、圖像)。 npm 是安裝 docxtemplater 最簡單的方法 二、在導(dǎo)出word前,需要準(zhǔn)備一個word模板文件(按自己所需最后導(dǎo)出的樣式),放到public文件夾下,

    2024年02月07日
    瀏覽(15)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包