vue-office
支持多种文件(docx、pdf、excel)预览的vue组件套装,支持vue2/3。
安装
//docx文档预览组件
npm install @vue-office/docx
//excel文档预览组件
npm install @vue-office/excel
//pdf文档预览组件
npm install @vue-office/pdf
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
使用示例
文档预览场景大致可以分为两种:
有文档网络地址,比如 https://***.docx
文件上传时预览,此时可以获取文件的ArrayBuffer或Blob
docx文档的预览
使用网络地址预览
<template>
<vue-office-docx :src="docx" @rendered="rendered"/>
</template>
<script>
//引入VueOfficeDocx组件
import VueOfficeDocx from ''@vue-office/docx''
//引入相关样式
import ''@vue-office/docx/lib/index.css''
export default {
components:{
VueOfficeDocx
},
data(){
return {
docx: ''http://static.shanhuxueyuan.com/test6.docx'' //设置文档网络地址,可以是相对地址
}
},
methods:{
rendered(){
console.log("渲染完成")
}
}
}
</script>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
上传文件预览
我们使用element的上传组件作为示例,当然也可以使用普通的input type=“file”,只要能获取文件的arrayBuffer即可
<template>
<div id="docx-demo">
<el-upload :limit="1" :file-list="fileList" accept=".docx" :beforeUpload="beforeUpload" action="">
<el-button size="small" type="warning">点击上传</el-button>
</el-upload>
<vue-office-docx :src="src" />
</div>
</template>
<script>
import VueOfficeDocx from ''@vue-office/docx''
import ''@vue-office/docx/lib/index.css''
export default {
components: {
VueOfficeDocx
},
data(){
return {
src:'''',
fileList:[]
}
},
methods:{
beforeUpload(file){
let reader = new FileReader();
reader.readAsArrayBuffer(file);
reader.onload = (loadEvent) => {
let arrayBuffer = loadEvent.target.result;
this.src = arrayBuffer
};
return false
}
}
}
</script>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
如果是原生的input type=“file”,也是类似的
<template>
<div>
<input type="file" @change="changeHandle"/>
<vue-office-docx :src="src"/>
</div>
</template>
<script>
import VueOfficeDocx from ''@vue-office/docx''
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
}
}
}
}
</script>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
excel文档预览
<template>
<vue-office-excel :src="excel" @rendered="rendered"/>
</template>
<script>
//引入VueOfficeExcel组件
import VueOfficeExcel from ''@vue-office/excel''
//引入相关样式
import ''@vue-office/excel/lib/index.css''
export default {
components:{
VueOfficeExcel
},
data(){
return {
excel: ''http://static.shanhuxueyuan.com/demo/excel.xlsx''//设置文档地址
}
},
methods:{
rendered(){
console.log("渲染完成")
}
}
}
</script>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
pdf文档预览
<template>
<vue-office-pdf :src="pdf" @rendered="rendered"/>
</template>
<script>
//引入VueOfficePdf组件
import VueOfficePdf from ''@vue-office/pdf''
export default {
components:{
VueOfficePdf
},
data(){
return {
pdf: ''http://static.shanhuxueyuan.com/test.pdf'' //设置文档地址
}
},
methods:{
rendered(){
console.log("渲染完成")
}
}
}
</script>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
excel和pdf,也同样支持通过文件上传进行预览,代码和docx的预览一样。
API
为了使用简单,这几种组件的API尽量保持一致,如果是某个组件特有的,会单独注明
属性

事件
