前端将html转word

一个需求是一个word模板加入用户填写的数据,需要可以打包下载,

这个时候的想法便是将word模板写成html,再将html转成word然后打包下载

网上搜索说是使用html-to-docx,使用这个会报错,还看到说没有使用mamonth,最后都是不行

直到我发现可以不用插件就完成这个功能,js原生就行

下面便是代码,JSZip是一个压缩的插件

// 创建一个虚拟的HTML文档
      const doc = document.implementation.createHTMLDocument('')
      doc.body.innerHTML = htmlContent

      // 将HTML文档转换为Word
      const wordContent = `<!DOCTYPE html>
      <html xmlns:w="urn:schemas-microsoft-com:office:word">
        <head>
          <meta charset="utf-8">
          <title>Export to Word</title>
          <style>
            /* 在这里添加任何想要的样式 */
            img{max-width:100px;width:100px    ;}
          </style>
        </head>
        <body>
          ${doc.body.innerHTML}
        </body>
      </html>`
      // 创建一个Blob对象
      const blob = new Blob([wordContent], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' })
      this.visible = false
      console.log(blob, 'data')
      // 创建一个新的ZIP实例
      const zip = new JSZip()
      console.log(new Blob([urls[0]]), 'new Blob([urls[0]])')
      zip.file('福建省职业技能鉴定申请表.docx', blob)
      // const imageBlob = await fetch(urls[0], { mode: 'cors' }).then(res => res.blob())
      // const imageBlob2 = await fetch(urls[1], { mode: 'cors' }).then(res => res.blob())

      // zip.file('身份证.jpg', imageBlob)
      // zip.file('身份证2.jpg', imageBlob2)
      // console.log(htmlContent, 'convertedDocx', imageBlob, 'img', urls[0])

      // 生成ZIP文件并下载
      zip.generateAsync({ type: 'blob' }).then((content) => {
        // 创建一个下载链接
        const a = document.createElement('a')
        const url = URL.createObjectURL(content)
        a.href = url
        a.download = 'files.zip'
        a.click()

        // 释放URL对象
        URL.revokeObjectURL(url)
      })

如果只需要下载word,不需要压缩,可以是下面的代码

 //   // 创建一个虚拟的HTML文档
      const doc = document.implementation.createHTMLDocument('')
      doc.body.innerHTML = htmlContent

      // 将HTML文档转换为Word
      const wordContent = `<!DOCTYPE html>
      <html xmlns:w="urn:schemas-microsoft-com:office:word">
        <head>
          <meta charset="utf-8">
          <title>Export to Word</title>
          <style>
            /* 在这里添加任何想要的样式 */
            img{max-width:100px;width:100px    ;}
          </style>
        </head>
        <body>
          ${doc.body.innerHTML}
        </body>
      </html>`
      // 创建一个Blob对象
      const blob = new Blob([wordContent], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' })
   // 创建一个a标签
        const link = document.createElement('a')
        link.href = URL.createObjectURL(blob)
         link.download = 'export.doc'

      //   // 模拟点击下载链接
         // link.click()

      //   // 释放URL对象
         URL.revokeObjectURL(link.href)
         console.log(blob, '', link)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值