简述:
在项目中,可能会有录入信息时预览上传的文件,或者在详情页查看文件等在线预览附件的需求场景,但是,一般除pdf外,其余类型文件并不支持直接客户端打开。 vue-office是一个支持多种文件(docx、.xlsx、pdf)预览的vue组件库,能够很好的实现在项目中各种在线预览附件的功能需求
优点:
-
使用简单,只需提供文档的src(网络地址)即可完成文档预览
-
支持docx、pdf、excel多种文档的在线预览方案
-
用户体验和性能比较好,可以选择每个文档的最佳预览方案
1. 安装
// docx文档预览组件
npm install @vue-office/docx vue-demi
// excel文档预览组件
npm install @vue-office/excel vue-demi
// pdf文档预览组件
npm install @vue-office/pdf vue-demi
注意点:
// 如果是vue2.6版本或以下还需要额外安装 @vue/composition-api
npm install @vue/composition-api/
成功效果: 如下图,已经成功安装会出现added xx packages提示
2. 引入组件、注册
引入进来是个组件,注册一下就可以直接使用了 。
使用模块不多,不建议使用全局引入、注册
// docx文档引入、注册
import VueOfficeDocx from '@vue-office/docx'
import '@vue-office/docx/lib/index.css'
<script>
export default {
components: { VueOfficeDocx }
}
</script>
// excel文档引入、注册
import VueOfficeExcel from '@vue-office/excel'
import '@vue-office/excel/lib/index.css'
<script>
export default {
components: { VueOfficeDocx }
}
</script>
// pdf文档引入、注册
import VueOfficePdf from '@vue-office/pdf'
<script>
export default {
components: { VueOfficeDocx }
}
</script>
3. 使用
3.1 常用属性和方法:
示例:
<VueOfficeDocx :template="myTemplate" :options="editorOptions" ref="docxEditor"
@document-loaded="handleDocumentLoaded"></VueOfficeDocx>
import VueOfficeDocx from '@vue-office/docx'
import '@vue-office/docx/lib/index.css'
<script>
export default {
components: { VueOfficeDocx },
data() {
return {
myTemplate: '/path/to/template.docx',
editorOptions: {
toolbar: true,
width: '800px',
height: '600px'
}
};
},
mounted() {
const editor = this.$refs.docxEditor.editor;
// 使用 editor 实例执行操作
},
methods:{
testDocument() {
// 保存文档
this.$refs.docxEditor.save('/path/to/save.docx');
// 加载文档
this.$refs.docxEditor.load('/path/to/document.docx');
},
handleDocumentLoaded() {
// 文档加载完成后执行的操作
}
}
}
</script>
属性、方法名 | 描述 |
---|---|
template 属性 | 指定要加载和显示的初始文档模板 |
options 属性 | 配置文档编辑器的选项,如工具栏的显示与隐藏、编辑器的尺寸等 |
editor 属性 | 文档编辑器的实例,通过它可以操作和访问文档的内容和样式 |
save 方法 | 保存文档的方法,将编辑后的文档保存为 .docx 文件 |
load 方法 | 加载文档的方法,用于将已有的 .docx 文件加载到编辑器中进行编辑 |
document-loaded 事件 | 监听文档加载完成后执行的操作 |
3.2 常见使用场景:
- 预览指定地址文档,例如网络地址等
- 文件上传后点击预览查看
3.2.1. 使用网络地址示例(docx文件预览)
excel文件预览和pdf文件预览与docx的使用方式一致,注意文档格式即可。
<template>
<el-button size="small" type="primary" @click="isShowDocx=true">点击预览</el-button>
<VueOfficeDocx v-if="isShowDocx" :src="docx" style="height: 100vh;" @rendered="rendered" />
</template>
import VueOfficeDocx from '@vue-office/docx' //引入VueOfficeDocx组件
import '@vue-office/docx/lib/index.css' //引入相关样式
export default {
components:{
VueOfficeDocx
},
data(){
return {
isShowDocx: false,
//设置文档网络地址,可以是相对地址
docx: 'https://501351981.github.io/vue-office/examples/dist/static/test-files/test.docx'
}
},
methods:{
rendered(){
console.log("渲染完成")
}
}
}
效果图:
3.2.2. 上传文件预览示例(docx文件预览)
excel文件预览和pdf文件预览与docx的使用方式一致,注意文档格式即可。
接收后台返回的文件流也是相同的,设置responseType为"blob",返回的也就是文件流Blob对象,只要将文件流赋值给src即可
<template>
<div>
<input type="file" @change="changeHandle"/>
<VueOfficeDocx :src="src"/>
</div>
</template>
import VueOfficeDocx from '@vue-office/docx' //引入VueOfficeDocx组件
import '@vue-office/docx/lib/index.css' //引入相关样式
export default {
components: {
VueOfficeDocx
},
data(){
return {
src: ''
}
},
methods:{
changeHandle(event){
let file = event.target.files[0]
let fileReader = new FileReader()
fileReader.readAsArrayBuffer(file)
fileReader.onload = () => {
this.src = fileReader.result
}
}
}
}
效果图:
4. 注意事项
- 目前vue-office不支持doc格式。
- 需要确保数据格式正确,否则可能会出现转换错误的情况。