vue-office/README.md
2024-12-14 09:38:39 +08:00

318 lines
8.4 KiB
Markdown
Raw Permalink 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、excel、pdf、pptx**)预览的vue组件库支持vue2/3。也支持非Vue框架的预览。
[《演示效果》](https://501351981.github.io/vue-office/examples/dist/)
[《使用非Vue框架原生js、React等、或者Vue里面报错看这里》](https://501351981.github.io/vue-office/examples/docs/guide/js-preview.html)
## 功能特色
- 一站式提供word(.docx)、pdf、excel(.xlsx, .xls)、ppt(.pptx)多种文档的在线预览方案,有它就够了
- 简单只需提供文档的src(网络地址)即可完成文档预览
- 体验好:选择每个文档的最佳预览方案,保证用户体验和性能都达到最佳状态
- 性能好:针对数据量较大做了优化
## 安装
```shell
#docx文档预览组件
npm install @vue-office/docx vue-demi@0.14.6
#excel文档预览组件
npm install @vue-office/excel vue-demi@0.14.6
#pdf文档预览组件
npm install @vue-office/pdf vue-demi@0.14.6
#pptx文档预览组件
npm install @vue-office/pptx vue-demi@0.14.6
```
如果是vue2.6版本或以下还需要额外安装 @vue/composition-api
```shell
npm install @vue/composition-api
```
## 使用示例
文档预览场景大致可以分为三种:
- 有文档CDN地址比如 https://***.docx将文档地址字符串传给组件的src属性
- 通过接口请求获取文件内容此时可以获取文件的ArrayBuffer或Blob格式数据传给组件的src属性
- 文件上传时预览此时可以获取文件的ArrayBuffer或Blob格式数据传给组件的src属性
<details>
<summary>docx文件预览示例 (三种使用方式均有示例)</summary>
**1. 使用网络地址预览**
```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>
```
**2. 上传文件预览**
读取文件的ArrayBuffer
```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>
```
**3. 二进制文件预览**
如果后端给的不是CDN地址而是一些POST接口该接口返回二进制流则可以调用接口获取文件的ArrayBuffer数据传递给src属性。
```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: ''
}
},
mounted(){
fetch('你的API文件地址', {
method: 'post'
}).then(res=>{
//读取文件的arrayBuffer
res.arrayBuffer().then(res=>{
this.docx = res
})
})
},
methods:{
rendered(){
console.log("渲染完成")
}
}
}
</script>
```
</details>
<details>
<summary>excel 文件预览示例 </summary>
通过网络地址预览示例如下通过文件ArrayBuffer预览和上面docx的使用方式一致。
```vue
<template>
<vue-office-excel
:src="excel"
style="height: 100vh;"
@rendered="renderedHandler"
@error="errorHandler"
/>
</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: {
renderedHandler() {
console.log("渲染完成")
},
errorHandler() {
console.log("渲染失败")
}
}
}
</script>
```
</details>
<details>
<summary>pdf 文件预览示例 </summary>
通过网络地址预览示例如下通过文件ArrayBuffer预览和上面docx的使用方式一致。
```vue
<template>
<vue-office-pdf
:src="pdf"
style="height: 100vh"
@rendered="renderedHandler"
@error="errorHandler"
/>
</template>
<script>
//引入VueOfficePdf组件
import VueOfficePdf from '@vue-office/pdf'
export default {
components: {
VueOfficePdf
},
data() {
return {
pdf: 'http://static.shanhuxueyuan.com/test.pdf' //设置文档地址
}
},
methods: {
renderedHandler() {
console.log("渲染完成")
},
errorHandler() {
console.log("渲染失败")
}
}
}
</script>
```
</details>
<details>
<summary>pptx 文件预览示例 </summary>
通过网络地址预览示例如下通过文件ArrayBuffer预览和上面docx的使用方式一致。
```vue
<template>
<vue-office-pptx
:src="pdf"
style="height: 100vh"
@rendered="renderedHandler"
@error="errorHandler"
/>
</template>
<script>
import VueOfficePptx from '@vue-office/pptx'
export default {
components: {
VueOfficePptx
},
data() {
return {
pdf: 'http://****/test.pptx' //设置文档地址
}
},
methods: {
renderedHandler() {
console.log("渲染完成")
},
errorHandler() {
console.log("渲染失败")
}
}
}
</script>
```
</details>
# 项目依赖的第三方库
- docx 基于docx-preview库实现相关issues暂不处理
- pdf 基于pdfjs库实现实现了虚拟列表增加性能
- excel: 基于exceljs 和 x-data-spreadsheet实现全网样式支持更好
- pptx 基于自研库 [pptx-preview](https://github.com/501351981/pptx-preview) 实现,源码单独付费向作者索取
# 我要支持作者
如果该项目帮到了您,节省了您宝贵的开发时间,还请您不吝给项目点个免费的赞。
当然了,如果您能请作者喝杯咖啡,哪怕喝瓶娃娃哈矿泉水,也是对作者最真诚的鼓励,打赏用户欢迎添加微信,后续交流前端相关问题。
![](https://501351981.github.io/vue-office/examples/dist/static/wx.png)
如果您有问题要咨询或者解决可打赏咨询作者自2024年12月起可能不会及时处理issues内容作者也要吃饭也面临大龄程序员困境。
## 为什么没有开放源码打赏50+送源码)
我们都知道,如果一件事情没有收益,那是很难长久的,特别是对于一个大龄程序员来说,花费大量的时间"用爱发电"对大家来说是非常值得尊敬的而我感觉对家庭来说可能是不道德的没有收益没有正反馈很难把这个库完善下去我们也看到了很多开源库已经多年没有更新了。为了后续开发出更好用的前端office文件预览库本项目需要大家的支持
源码需付费向作者索要_**打赏50**+_打赏用户无论多少均可添加作者微信交流该库或者前端领域话题源码不得用于开源这也是关闭源码的原因之一有些人直接复制开源作为自己项目
## 掘金小册
凝聚作者近10年工作经验的掘金小册[《如何写出高质量的前端代码》](https://juejin.cn/book/7351005935306801188) 已经上线啦,欢迎前端同学关注,希望能够提升大家的前端编码水平。
小册已售 890+份,收到前端同学的高度评价,对提升日常开发效率和质量,有非常大的帮助。