当前位置:首页 > VUE

vue实现word在线预览

2026-02-20 23:39:58VUE

Vue 实现 Word 文档在线预览

使用 mammoth.js 解析 .docx 文件

mammoth.js 是一个浏览器端的库,可将 .docx 文件转换为 HTML,适合预览文档内容。

安装依赖:

npm install mammoth

示例代码:

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

<script>
import * as mammoth from "mammoth";

export default {
  data() {
    return {
      previewContent: ""
    };
  },
  methods: {
    handleFileUpload(e) {
      const file = e.target.files[0];
      const reader = new FileReader();
      reader.onload = (event) => {
        mammoth.extractRawText({ arrayBuffer: event.target.result })
          .then(result => {
            this.previewContent = result.value;
          });
      };
      reader.readAsArrayBuffer(file);
    }
  }
};
</script>

使用 docx-preview

docx-preview 提供更接近原生 Word 的渲染效果,支持样式保留。

vue实现word在线预览

安装依赖:

npm install docx-preview

示例代码:

vue实现word在线预览

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

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

export default {
  methods: {
    renderDocx(e) {
      const file = e.target.files[0];
      const container = this.$refs.docxContainer;
      renderAsync(file, container)
        .catch(err => console.error("渲染失败:", err));
    }
  }
};
</script>

通过后端服务转换

若需支持旧版 .doc 文件或复杂格式,可通过后端转换(如 LibreOffice 或 API 服务)返回 HTML/PDF。

前端调用示例:

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

<script>
export default {
  data() {
    return {
      previewUrl: ""
    };
  },
  methods: {
    async uploadFile(e) {
      const formData = new FormData();
      formData.append("file", e.target.files[0]);
      const response = await fetch("/api/convert", {
        method: "POST",
        body: formData
      });
      const { url } = await response.json();
      this.previewUrl = url;
    }
  }
};
</script>

使用微软 Office Online 嵌入

通过嵌入 Office Online 实现原生预览(需公网可访问的文件 URL):

<template>
  <iframe 
    width="100%" 
    height="600px" 
    :src="`https://view.officeapps.live.com/op/embed.aspx?src=${encodeURIComponent(fileUrl)}`"
    frameborder="0">
  </iframe>
</template>

注意事项

  • 直接解析 .docx 的方案可能丢失部分复杂格式。
  • 大文件建议分片上传或使用后端转换。
  • 敏感文档需自行部署转换服务,避免第三方 API 泄漏数据。

标签: 在线vue
分享给朋友:

相关文章

vue实现导航切换内容

vue实现导航切换内容

Vue实现导航切换内容的方法 在Vue中实现导航切换内容,可以通过以下方式实现: 使用动态组件 动态组件通过<component :is="currentComponent">实现内容切…

vue穿梭框组件实现

vue穿梭框组件实现

实现基础穿梭框组件 在Vue中实现穿梭框组件,可以使用<el-transfer>(Element UI)或手动实现。以下是手动实现的核心逻辑: <template> &l…

实现简易vue

实现简易vue

实现简易 Vue 的核心思路 Vue 的核心功能包括数据响应式、模板编译和虚拟 DOM。以下是一个简易实现方案,涵盖核心功能模块。 数据响应式系统 通过 Object.defineProperty…

vue实现全屏

vue实现全屏

Vue 实现全屏功能的方法 在 Vue 中实现全屏功能可以通过浏览器提供的 Fullscreen API 来实现。以下是几种常见的实现方式: 使用原生 Fullscreen API 通过调用 doc…

vue实现Siri

vue实现Siri

Vue 实现 Siri 风格语音交互 实现类似 Siri 的语音交互功能需要结合语音识别、语音合成和前端交互逻辑。Vue 作为前端框架,可以很好地管理这些功能的交互状态。 语音识别集成 使用 Web…

vue实现心电图

vue实现心电图

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