js html导出word

1.需要npm 下载下面指定版本的包

"dependencies": {
    "jszip-utils": "^0.1.0",
    "pizzip": "^3.1.4",
    "file-saver": "^2.0.5",
    "docxtemplater": "^3.29.5",
    "docxtemplater-image-module-free": "^1.1.1"
}
import JSZipUtils from 'jszip-utils'
import PizZip from 'pizzip'
import { saveAs } from 'file-saver'



   // 导出报告
    output()
    {
      
        let wordObj = {
          filename: 'xxxxx报告',
          endtime: 'xxxx',
          starttime: '2023-07-28',
          filteredArr
        }
        console.log(wordObj)
        this.exportWordAndImage(wordObj, 'config/module.docx', 'xxxxx报告')
    },
   /**
     * 可以导出图片的方法 浏览器导出
     * @param wordData  数据{}
     * @param template  模板文件位置
     * @param outputFilename  输出名
     */
    exportWordAndImage(wordData, template, outputFilename)
    {
      let ImageModule = require('docxtemplater-image-module-free')    // 图片模版
      let docxtemplater = require('docxtemplater')
      // 读取并获得模板文件的二进制内容
      JSZipUtils.getBinaryContent('static/' + template, function(error, content)
      {
        // model.docx是模板。我们在导出的时候,会根据此模板来导出对应的数据
        // 抛出异常
        if (error)
          return
        // 图片处理
        let opts = {}
        opts.centered = true  // 图片居中,在word模板中定义方式为{%%image}
        opts.fileType = 'docx'
        opts.getImage = function(tagValue, tagName)
        {
          return new Promise(function(resolve, reject)
          {
            JSZipUtils.getBinaryContent(tagValue, function(error, content)
            {
              if (error)
                return reject(error)
              return resolve(content)
            })
          })
        }
        opts.getSize = function(img, tagValue, tagName)
        {
          // FOR FIXED SIZE IMAGE :
          // return [470, 210] //图片大小 (这个可以写成动态的,开发文档上有)
          return new Promise(function(resolve, reject)
          {
            let image = new Image()
            image.src = tagValue
            image.onload = function()
            {
              resolve([550, 150])
            }
            image.onerror = function(e)
            {
              reject(e)
            }
          })
        }
        let imageModule = new ImageModule(opts)
        // 创建一个PizZip实例,内容为模板的内容
        let zip = new PizZip(content)
        // 创建并加载docxtemplater实例对象
        let doc = new docxtemplater()
          .loadZip(zip)
          .attachModule(imageModule)
          .compile()

        doc.resolveData(wordData).then(function()
        {
          doc.render()
          let out = doc.getZip().generate({
            type: 'blob',
            mimeType: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
          })
          /// / 将目标文件对象保存为目标类型的文件,并命名
          saveAs(out, outputFilename + '.docx')
        })
      })
      this.$processing.close()
    }

2.填写模板文件

跟代码的中的下面路径对应

 

word文件内容:(wordObj对象中的字段)

开始时间:{starttime}

结束时间:{endtime}

选择的类型:{checkedlabel}

{#isHasImage}

{%base64Image}

监测数据折线图

{/isHasImage}

{#isNodata}

{base64Image}

{/isNodata}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值