当前位置:   article > 正文

前端vue3实现本地及在线文件预览(含pdf/txt/mp3/mp4/docx/xlsx/pptx)_vue3 vue-office

vue3 vue-office

一、仅需实现在线预览,且文件地址公网可访问

(一)微软office免费预览(推荐

支持doc/docx/xls/xlsx/ppt/pptx等多种office文件格式的免费预览

  1. //示例代码
  2. //​在https://view.officeapps.live.com/op/view.aspx?src=后面拼接需要预览的地址,如下:\
  3. let url="http://xxx.com/files/demo.doc"
  4. window.open("​https://view.officeapps.live.com/op/view.aspx?src="+encodeURIComponent(​url))

(二)XDOC文档预览云服务

 移动端和PC端无插件预览PDF、OFD、Word、WPS等多种格式文档

  1. //示例
  2. let url="http://xxx.com/files/demo.doc"
  3. window.open("https://view.xdocin.com/view?src=" + encodeURIComponent(url))

二、本地及非公网文件在线预览

本地或内网预览需要借助插件实现,pdf、mp3、mp4等主要靠原生标签或浏览器自带功能,尽量减少了插件的安装

(一)pdf、txt

直接使用ifrem嵌入页面,用浏览器自带预览功能满足基本需求,其他也可以试试vue-office的pdf插件

pdf预览效果

txt预览效果

(二)mp3、mp4

使用原生audio和video标签能满足基本需求,如有其他功能的需要可以使用video.js等插件

mp3预览效果

mp4预览效果

(三)docx、xlsx

vue-office/docx和vue-office/excel对docx和xlsx文件预览,个人感觉实现上更方便,更多实现方式也可自行查询,案例很多此处就不再列出示例代码

docx预览效果

xlsx预览效果

pdf/txt/mp3/mp4/docx/xlsx及图片示例代码:
  1. <template>
  2. <div>
  3. <el-button @click="getSrc">点击获取后台文件并预览</el-button>
  4. <input type="file" @change="uploadFile($event)" />
  5. <!-- pdf/text -->
  6. <iframe v-if="['pdf', 'text'].includes(type)" :src="src"></iframe>
  7. <!-- mp3、ogg、wav -->
  8. <audio
  9. v-if="['mp3', 'ogg', 'wav'].includes(type)"
  10. controls
  11. :src="src"
  12. ></audio>
  13. <!-- mp4、webm、ogv -->
  14. <video
  15. v-if="['mp4', 'webm', 'ogv'].includes(type)"
  16. controls
  17. :src="src"
  18. ></video>
  19. <!-- docx -->
  20. <vue-office-docx
  21. v-if="type == 'docx'"
  22. :src="src"
  23. @rendered="fileRendered"
  24. @error="fileError"
  25. />
  26. <!-- xlsx -->
  27. <vue-office-excel
  28. v-if="type == 'xlsx'"
  29. :src="src"
  30. @rendered="fileRendered"
  31. @error="fileError"
  32. />
  33. <!-- 图片 -->
  34. <img v-if="['jpg', 'png'].includes(type)" :src="src" />
  35. <!-- doc -->
  36. <!-- doc等格式文件的预览需要后台处理成html后使用vue自带v-html进行展示 -->
  37. <!-- <div class="docHtml" v-html="html"></div> -->
  38. </div>
  39. </template>
  40. <script lang="ts" setup>
  41. import { ref } from "vue";
  42. import { getImgPath } from "@/api/testApi";
  43. import VueOfficeDocx from "@vue-office/docx"; //引入docx预览插件
  44. import "@vue-office/docx/lib/index.css"; //docx预览插件样式
  45. import VueOfficeExcel from "@vue-office/excel"; //引入excel预览插件
  46. import "@vue-office/excel/lib/index.css"; //引入excel预览插件样式
  47. const src = ref("");
  48. const type = ref("");
  49. // 获取后台文件,根据实际接口处理数据
  50. const getSrc = async () => {
  51. await getImgPath().then((res: any) => {
  52. let imgBlob = new Blob([res]);
  53. src.value = URL.createObjectURL(imgBlob);
  54. });
  55. };
  56. // 本地上传的文件
  57. const uploadFile = (ev: any) => {
  58. let file = ev.target.files[0];
  59. if (file.name) {
  60. src.value = URL.createObjectURL(file);
  61. }
  62. };
  63. // vueOffice渲染完成的回调
  64. const fileRendered = (e: any) => {
  65. console.log("渲染完成了", e);
  66. };
  67. // vueOffice渲染出错的回调
  68. const fileError = (e: any) => {
  69. console.log("渲染出错了", e);
  70. };
  71. </script>
  72. <style lang="scss" scoped>
  73. </style>

(三)pptx

pptx预览使用的是pptx.js文件

1.在pptx.js官网下载压缩包

PPTXjsicon-default.png?t=N7T8https://pptx.js.org/index.html

(1)进入官网点击下载按钮

(2)选择版本下载

2.在public文件夹中添加pptxjs依赖文件
3.在index.html中引入
  1. <link rel="stylesheet" href="/PPTXjs/css/pptxjs.css" />
  2. <link rel="stylesheet" href="/PPTXjs/css/nv.d3.min.css" />
  3. <!-- for charts graphs -->
  4. <script
  5. type="text/javascript"
  6. src="/PPTXjs/js/jquery-1.11.3.min.js"
  7. ></script>
  8. <script type="text/javascript" src="/PPTXjs/js/jszip.min.js"></script>
  9. <!-- v2.. , NOT v.3.. -->
  10. <script type="text/javascript" src="/PPTXjs/js/filereader.js"></script>
  11. <!--https://github.com/meshesha/filereader.js -->
  12. <script type="text/javascript" src="/PPTXjs/js/d3.min.js"></script>
  13. <!-- for charts graphs -->
  14. <script type="text/javascript" src="/PPTXjs/js/nv.d3.min.js"></script>
  15. <!-- for charts graphs -->
  16. <script type="text/javascript" src="/PPTXjs/js/pptxjs.js"></script>
  17. <script type="text/javascript" src="/PPTXjs/js/divs2slides.js"></script>
  18. <!-- for slide show -->
4.在页面中使用 
  1. <template>
  2. <div id="pptx"></div>
  3. </template>
  4. <script lang="ts" setup>
  5. const pptxShow = (src: any) => {
  6. nextTick(() => {
  7. $("#pptx").pptxToHtml({
  8. pptxFileUrl: src, //pptx文件地址
  9. slidesScale: "100%",
  10. });
  11. });
  12. </script>
  13. <style lang="scss" scoped>
  14. </style>
pptx预览效果

pptx预览时注意:页面报Uncaught (in promise) TypeError: $(...).pptxToHtml is not a function的错误,检查在index.html中引入的jequry版本是否与项目中其他地方使用的版本冲突导致,选择保留一个版本即可。

如果以上内容对你有帮助,就点个赞加入收藏吧~~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/95199
推荐阅读
相关标签
  

闽ICP备14008679号