Blob设置type为application/msword将document DOM节点转换为Word(.doc,.docx),并下载到本地

core code

javascript 复制代码
    // 导出为Word文档
    downloadWord({ dom, fileName = "", fileType = "doc", l = {} } = {}) {
        l.show && l.show();
        // 获取HTML内容
        const content = dom.innerHTML;

        // 构建Word文档的HTML结构
        const html = `
                  <!DOCTYPE html>
                  <html>
                  <head>
                      <meta charset="UTF-8">
                      <title>HTML导出文档</title>
                      <style>
                          body { font-family: Arial, sans-serif; line-height: 1.6; }
                          h1, h2, h3 { color: #2c3e50; }
                          table { width: 100%; border-collapse: collapse; margin-bottom: 20px; }
                          th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
                          th { background-color: #f2f2f2; }
                          ul, ol { margin-left: 20px; margin-bottom: 15px; }
                      </style>
                  </head>
                  <body>
                      ${content}
                  </body>
                  </html>
              `;

        // 创建Blob对象
        const blob = new Blob([html], { type: "application/msword" });

        // 创建下载链接
        const link = document.createElement("a");
        link.href = URL.createObjectURL(blob);
        link.download = `${fileName}.${fileType}`;

        // 触发下载
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
        setTimeout(() => {
            l.close && l.close();
        }, 1000);
    },

demo

html 复制代码
<template>
  <div :class="$options.name">
    <h1>公司季度报告</h1>
    <p style="color: #2c3e50"><strong>2023年第三季度</strong></p>

    <h2>执行摘要</h2>
    <p>
      本季度公司业绩表现强劲,总收入同比增长25%。主要增长点来自新产品线的推出和国际市场的拓展。
    </p>

    <h2>财务亮点</h2>
    <ul>
      <li>总收入:$1.25亿 (同比增长25%)</li>
      <li>净利润:$2300万 (同比增长18%)</li>
      <li>毛利率:42% (同比提高2个百分点)</li>
    </ul>

    <h2>部门表现</h2>
    <table border="1" style="width: 100%; border-collapse: collapse">
      <tr>
        <th>部门</th>
        <th>收入</th>
        <th>同比增长</th>
      </tr>
      <tr>
        <td>产品开发</td>
        <td>$6500万</td>
        <td>+32%</td>
      </tr>
      <tr>
        <td>市场销售</td>
        <td>$4500万</td>
        <td>+18%</td>
      </tr>
      <tr>
        <td>客户服务</td>
        <td>$1500万</td>
        <td>+12%</td>
      </tr>
    </table>

    <el-button type="primary" @click="downloadWord" :loading="loading">
      下载为Word</el-button
    >
  </div>
</template>
<script>
export default {
  name: `downloadWord`,
  data() {
    return {
      loading: false,
    };
  },
  methods: {
    downloadWord(d) {
      this.$g.downloadWord({
        dom: this.$el,
        l: { show: () => (this.loading = true), close: () => (this.loading = false) },
      });
    },
  },
};
</script>
<style lang="scss" scoped>
.downloadWord {
  box-sizing: border-box;
  padding: 20px;
  line-height: normal;
  & > * {
    margin-bottom: 10px;
    &:last-of-child {
      margin-right: 0;
      margin-bottom: 0;
    }
  }

  table {
    td,
    th {
      box-sizing: border-box;
      border: 1px solid #eee;
      box-sizing: border-box;
      padding: 20px;
    }
  }
}
</style>
相关推荐
用户298698530146 小时前
.NET 文档自动化:Spire.Doc 设置奇偶页页眉/页脚的最佳实践
后端·c#·.net
用户3667462526746 小时前
接口文档汇总 - 2.设备状态管理
c#
用户3667462526747 小时前
接口文档汇总 - 3.PLC通信管理
c#
Ray Liang1 天前
用六边形架构与整洁架构对比是伪命题?
java·python·c#·架构设计
Scout-leaf4 天前
WPF新手村教程(三)—— 路由事件
c#·wpf
用户298698530144 天前
程序员效率工具:Spire.Doc如何助你一键搞定Word表格排版
后端·c#·.net
mudtools5 天前
搭建一套.net下能落地的飞书考勤系统
后端·c#·.net
玩泥巴的6 天前
搭建一套.net下能落地的飞书考勤系统
c#·.net·二次开发·飞书
唐宋元明清21886 天前
.NET 本地Db数据库-技术方案选型
windows·c#
郑州光合科技余经理6 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php