一文彻底搞懂前端实现文件预览(word、excel、pdf、ppt)
xjj_snntH
发布于 2022-6-9 16:22
浏览
0收藏
来自:掘金,作者:竹业
链接:https://juejin.cn/post/7071598747519549454
前言
因为业务需要,很多文件需要在前端实现预览,今天就来了解一下吧。
Demo地址:https://zhuye1993.github.io/file-view/dist/index.html
实现方案
找了网上的实现方案,效果看起来不错,放在下面的表格里,里面有一些是可以直接通过npm在vue中引入使用。
文档格式 | 老的开源组件 | 替代开源组件 |
---|---|---|
word(docx) | mammoth | docx-preview(npm) |
powerpoint(pptx) | pptxjs | pptxjs改造开发 |
excel(xlsx) | sheetjs、handsontable | exceljs(npm)、handsontable(npm)(npm) |
pdf(pdf) | pdfjs | pdfjs(npm) |
图片 | jquery.verySimpleImageViewer | v-viewer(npm) |
docx文件实现前端预览
代码实现
- 首先npm i docx-preview
- 引入renderAsync方法
- 将blob数据流传入方法中,渲染word文档
实现效果
pdf实现前端预览
代码实现
- 首先npm i pdfjs-dist
- 设置PDFJS.GlobalWorkerOptions.workerSrc的地址
- 通过PDFJS.getDocument处理pdf数据,返回一个对象pdfDoc
- 通过pdfDoc.getPage单独获取第1页的数据
- 创建一个dom元素,设置元素的画布属性
- 通过page.render方法,将数据渲染到画布上
实现效果
excel实现前端预览
代码实现
- 下载exceljs、handsontable的库
- 通过exceljs读取到文件的数据
- 通过workbook.getWorksheet方法获取到每一个工作表的数据,将数据处理成一个二维数组的数据
- 引入@handsontable/vue的组件HotTable
- 通过settings属性,将一些配置参数和二维数组数据传入组件,渲染成excel样式,实现预览
实现效果
pptx的前端预览
主要是通过jszip库,加载二进制文件,再经过一些列处理处理转换实现预览效果,实现起来比较麻烦,就不贴代码了,感兴趣的可以下载代码查看。
实现效果
总结
主要介绍了word、excel、pdf文件实现预览的方式,前端实现预览最好的效果还是PDF,不会出现一些文字错乱和乱码的问题,所以一般好的方案就是后端配合将不同格式的文件转换成pdf,再由前端实现预览效果,将会保留文件的一些样式的效果,对于图片、txt文件的实现,感兴趣的可以看下代码。
代码地址
github.com/zhuye1993/f…[2]
:https://github.com/zhuye1993/file-view
— EOF —
赞
6
收藏
回复
6
3
相关推荐
docx 可以纯前端实现预览啦?改天研究下
666
下次遇到预览需求可以来 copy 了