vue-office/README.md
2023-02-23 20:55:19 +08:00

244 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# vue-office
支持多种文件(docx、pdf、excel)预览的vue组件套装支持vue2/3。
[查看demo演示](https://501351981.github.io/vue-office/examples/dist/)
## 功能特色
- 一站式提供docx、pdf、excel多种文档的在线预览方案有它就够了
- 简单只需提供文档的src(网络地址)即可完成文档预览
- 体验好:选择每个文档的最佳预览方案,保证用户体验和性能都达到最佳状态
## 安装
```shell
#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
```shell
npm install @vue/composition-api/
```
## 使用示例
文档预览场景大致可以分为两种:
- 有文档网络地址,比如 https://***.docx
- 文件上传时预览此时可以获取文件的ArrayBuffer或Blob
### docx文档的预览
**使用网络地址预览**
```vue
<template>
<vue-office-docx
:src="docx"
style="height: 100vh;"
@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>
```
**上传文件预览**
我们使用element的上传组件作为示例当然也可以使用普通的input type="file"只要能获取文件的arrayBuffer即可
```vue
<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>
```
如果是原生的input type="file",也是类似的
```vue
<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>
```
### excel文档预览
```vue
<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>
```
### pdf文档预览
```vue
<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>
```
excel和pdf也同样支持通过文件上传进行预览代码和docx的预览一样。
## API
为了使用简单这几种组件的API尽量保持一致如果是某个组件特有的会单独注明
### 属性
| 属性 | 说明 | 类型 | 可选值 | 默认值 |
|-----------------|--------------------------------------------|---------------------------|----------------|-----|
| src | 文档地址 | String, ArrayBuffer, Blob | - | - |
| request-options | 请求参数对应window.fetch的请求参数可以用来设置header等请求信息 | Object | 参考window.fetch | {} |
### 事件
| 事件名 | 说明 | 参数 |
|----------|-----------------------------|-----------|
| rendered | 首次渲染完成及每次src变化之后渲染完成都会触发该事件 | |
| error | 各种失败,包括网络请求失败,渲染失败等 | errorInfo |
## 交流反馈
### 提Issue
如果您遇到了问题欢迎提Issue同时请您尽可能详细的描述您遇到的问题包括不限于
- 您使用的是哪个库: @vue-office/docx、@vue-office/excel、@vue-office/pdf
- 您使用的环境APP or WebPC or 移动端,如果是浏览器兼容问题,请提供您的浏览器版本
- 如果有错误,请粘贴详细的报错信息
详细的描述有助于我尽快定位问题,因为平时工作很忙,时间很有限,感谢理解
### 赞助和微信交流
**_如果该项目确实帮助到了您_**,欢迎赞助,以鼓励我将更多的休息时间,投入到该项目的优化中,也欢迎赞助后添加微信交流:\_hit757_
<img src="https://501351981.github.io/vue-office/examples/public/static/wx.png" alt="赞助二维码" width="260"/>
### 恳请各位大佬不吝点赞,开源不易,感谢过往各位大佬的支持~~