当前位置:首页 > VUE

vue实现word预览

2026-03-28 21:39:43VUE

Vue 实现 Word 预览的方法

使用 mammoth.js 解析 .docx 文件

安装依赖:

npm install mammoth

示例代码:

<template>
  <div>
    <input type="file" @change="handleFileUpload" accept=".docx" />
    <div v-html="htmlContent"></div>
  </div>
</template>

<script>
import mammoth from "mammoth";

export default {
  data() {
    return {
      htmlContent: "",
    };
  },
  methods: {
    handleFileUpload(event) {
      const file = event.target.files[0];
      const reader = new FileReader();

      reader.onload = (e) => {
        mammoth.extractRawText({ arrayBuffer: e.target.result })
          .then((result) => {
            this.htmlContent = result.value;
          });
      };

      reader.readAsArrayBuffer(file);
    },
  },
};
</script>

使用 docx-preview

安装依赖:

vue实现word预览

npm install docx-preview

示例代码:

<template>
  <div>
    <input type="file" @change="previewDocx" accept=".docx" />
    <div ref="docxContainer"></div>
  </div>
</template>

<script>
import { renderAsync } from "docx-preview";

export default {
  methods: {
    previewDocx(event) {
      const file = event.target.files[0];
      const container = this.$refs.docxContainer;

      renderAsync(file, container)
        .catch((err) => {
          console.error("预览失败:", err);
        });
    },
  },
};
</script>

转换为 PDF 后预览

安装依赖:

vue实现word预览

npm install pdf-lib

示例代码:

<template>
  <div>
    <input type="file" @change="convertToPdf" accept=".docx" />
    <iframe v-if="pdfUrl" :src="pdfUrl" width="100%" height="500px"></iframe>
  </div>
</template>

<script>
import { PDFDocument } from "pdf-lib";

export default {
  data() {
    return {
      pdfUrl: null,
    };
  },
  methods: {
    async convertToPdf(event) {
      const file = event.target.files[0];
      const arrayBuffer = await file.arrayBuffer();
      const pdfDoc = await PDFDocument.create();
      const page = pdfDoc.addPage();

      // 添加自定义内容(需根据实际需求调整)
      page.drawText("Word 转 PDF 预览", {
        x: 50,
        y: 500,
        size: 30,
      });

      const pdfBytes = await pdfDoc.save();
      const blob = new Blob([pdfBytes], { type: "application/pdf" });
      this.pdfUrl = URL.createObjectURL(blob);
    },
  },
};
</script>

通过后端服务转换

如果前端方案不满足需求,可以通过后端将 Word 转换为 HTML 或 PDF 后返回给前端显示。

示例 API 调用:

<template>
  <div>
    <input type="file" @change="uploadFile" accept=".docx" />
    <div v-if="previewUrl">
      <iframe :src="previewUrl" width="100%" height="500px"></iframe>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      previewUrl: null,
    };
  },
  methods: {
    async uploadFile(event) {
      const file = event.target.files[0];
      const formData = new FormData();
      formData.append("file", file);

      try {
        const response = await fetch("/api/convert", {
          method: "POST",
          body: formData,
        });
        const result = await response.json();
        this.previewUrl = result.url;
      } catch (error) {
        console.error("转换失败:", error);
      }
    },
  },
};
</script>

注意事项

  • .docx 文件本质是 ZIP 格式,前端解析可能受限
  • 复杂格式(如表格、图片)在不同方案中支持程度不同
  • 大文件建议分片上传或使用后端处理

标签: vueword
分享给朋友:

相关文章

vue实现好评弹框

vue实现好评弹框

Vue 实现好评弹框的方法 使用 Vue 实现好评弹框可以通过组件化方式完成,结合动态数据绑定和事件处理。以下是具体实现步骤: 1. 创建弹框组件 新建一个 RatingDialog.vue 组件…

vue实现级联

vue实现级联

Vue 实现级联选择器的方法 级联选择器(Cascader)是常见的表单组件,用于处理多层级联动数据选择(如省市区选择)。以下是几种实现方式: 基于 Element UI 的 el-cascader…

实现vue框架

实现vue框架

Vue框架的基本实现 Vue是一个渐进式JavaScript框架,用于构建用户界面。以下是实现Vue框架的基本步骤: 安装Vue 通过CDN引入Vue是最简单的方式: <script src…

vue实现心电图

vue实现心电图

Vue 实现心电图效果 在 Vue 中实现心电图效果通常需要结合 Canvas 或 SVG 进行动态绘图,模拟心电图数据的实时变化。以下是两种实现方式的核心思路和代码示例: 使用 Canvas 绘制…

vue事件实现

vue事件实现

Vue 事件实现方法 在Vue中,事件处理是通过v-on指令或@简写来实现的。以下是几种常见的事件处理方式: 使用v-on指令绑定事件 <button v-on:click="handleC…

vue watch实现

vue watch实现

在 Vue 中实现 watch 监听数据变化 Vue 的 watch 选项用于监听数据变化并执行相应的回调函数。以下是几种常见的实现方式: 基础用法 export default { data(…