vue 预览 word 文件 docx

本文介绍了如何在Vue项目中通过npm安装并使用docx-preview和JSZip库,实现在线从服务器获取docx文件的预览以及本地文件选择后的预览功能。

一、安装 npm 依赖

npm i docx-preview@0.1.4
npm i jszip

预览在线地址

<template>
  <div class="home">
    <div ref="file"></div>
  </div>
</template>

<script>
import axios from 'axios'
const docx = require('docx-preview');

// 如果 docx-preview 版本比较新需要 es6 导出
// import { renderAsync } from 'docx-preview'

window.JSZip = require('jszip')
export default {
  mounted(){
    axios({
      method: 'get',
      responseType: 'blob', // 设置响应文件格式
      url: '/docx',
    }).then(({data}) => {
      docx.renderAsync(data,this.$refs.file) // 渲染到页面预览
    })
  }
}
</script>

预览本地地址

<template>
  <div class="my-component" ref="preview">
    <input type="file" @change="preview" ref="file">
  </div>
</template>

<script>
const docx = require('docx-preview');
window.JSZip = require('jszip')
export default {
  methods:{
    preview(e){
      docx.renderAsync(this.$refs.file.files[0],this.$refs.preview) // 渲染到页面预览
    }
  }
};
</script>

### Vue 预览 Word 文档的插件和方法 在 Vue 中实现 Word 文档的预览功能,可以使用以下几种方法或插件: #### 1. 使用 `@vue-office/docx` `@vue-office/docx` 是一个支持多种文件(包括 docx预览Vue 组件套装。它兼容 Vue 2 和 Vue 3,并提供了简单的 API 来加载和渲染文档[^1]。 ```vue <template> <div> <vue-office-docx :src="docx" style="height: 100%; margin: 0; padding: 0" @rendered="rendered" /> </div> </template> <script> import VueOfficeDocx from "@vue-office/docx"; import "@vue-office/docx/lib/index.css"; export default { components: { VueOfficeDocx }, props: { docx: { type: String, default: "a.docx", // 设置文档网络地址,可以是相对地址 }, }, methods: { rendered() { console.log("渲染完成"); }, }, }; </script> ``` #### 2. 使用 `docx-preview` `docx-preview` 是另一个用于预览 Word 文档的库。它可以将文档内容解析并渲染到指定的 DOM 元素中[^4]。 ```javascript methods: { createpsbgDoc() { createpsbgDoc() // 调用接口获取文档流 .then((res) => { docxx.renderAsync(res.data.data, this.$refs.word); // 渲染文档到指定元素 }) .catch((error) => { this.$message({ type: "error", message: error }); }); }, } ``` #### 3. 自定义渲染逻辑 如果需要更灵活的控制,可以使用 `renderAsync` 方法手动处理文档流并渲染到页面中[^3]。 ```javascript docxRender(buffer) { let bodyContainer = document.getElementById("demoDocContainer"); renderAsync( buffer, // Blob | ArrayBuffer | Uint8Array, 可以是 JSZip.loadAsync 支持的任何类型 bodyContainer, // HTMLElement 渲染文档内容的元素 null, // 用于呈现文档样式、数字、字体的元素。如果为 null,则将使用 bodyContainer。 this.docxOptions // 配置 ).then((res) => { console.log("res---->", res); }); } ``` #### 4. 在线转换服务 如果不想依赖第三方库,也可以通过在线转换服务(如 Google Docs Viewer 或其他云服务)生成预览链接[^2]。 ```html <iframe :src="'https://docs.google.com/gview?url=' + encodeURIComponent(docxUrl) + '&embedded=true'" width="100%" height="600px" frameborder="0" ></iframe> ``` --- ### 注意事项 - 确保文档流或文件路径正确无误。 - 对于较大的文档,可能需要考虑性能优化问题。 - 如果需要支持更多格式(如 PDF 或 Excel),可以结合 `@vue-office/pdf` 和 `@vue-office/excel` 使用。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值