当前位置:首页 > 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 的实现方案: 文件上传组件 使用 element-ui 或 ant-design-v…

vue页面分离的实现

vue页面分离的实现

Vue页面分离的实现方法 将Vue页面分离为多个组件或模块,有助于提升代码可维护性和复用性。以下是几种常见的实现方式: 组件化拆分 通过将页面拆分为多个子组件,每个组件负责特定功能或UI部分。使用i…

vue实现一个tab栏

vue实现一个tab栏

Vue 实现 Tab 栏 基础实现(选项式 API) <template> <div class="tab-container"> <div class="t…

vue实现granfana

vue实现granfana

Vue 实现类似 Grafana 的仪表盘 要在 Vue 中实现类似 Grafana 的仪表盘功能,需要结合数据可视化库、状态管理和 UI 组件。以下是关键步骤和推荐工具: 数据可视化库 使用 E…

vue 实现递归

vue 实现递归

Vue 实现递归组件的方法 在 Vue 中实现递归组件通常用于处理树形结构数据,例如菜单、评论列表或文件目录。以下是实现递归组件的关键步骤: 定义递归组件 递归组件需要设置 name 属性,以便在模…

vue实现grid

vue实现grid

Vue 实现 Grid 布局的方法 使用 CSS Grid 布局 Vue 可以结合 CSS Grid 布局实现灵活的网格系统。CSS Grid 是现代浏览器原生支持的布局方案,无需额外依赖库。 &l…