vue 实现 word/excel/ppt/pdf 等文件格式预览操作

效果图:

问题描述:一般情况下使用iframe标签就可以实现文件预览,但是这个标签只针对于ppt和pdf是有效的。对于doc文件就需要借助第三方插件(@vue-office/docx)来实现预览了。下面介绍使用方法。

安装插件:npm install --save @vue-office/docx @vue-office/excel @vue-office/pdf vue-demi

我只需要vue-office/docx这个 所以只安装了这个 其他的大家根据自己的需要对安装命令进行删减即可。

我是封装起了一个预览文件的组件(fileView.vue),因为项目上需要调用预览的地方比较多。

fileView.vue代码

<template>
  <el-dialog
    class="global-window"
    top="0"
    title="预览"
    status-icon
    :visible="visible"
    width="80%"
    :close-on-click-modal="false"
    :close-on-press-escape="false"
    @close="close"
  >
    <div class="body">
      <iframe v-show="showType === 'iframe'" src="" frameborder="0" id='iframe'></iframe>
      <vue-office-docx
        v-show="showType === 'doc'"
        :src="docUrl"
        style="height: 100vh;"
      />
    </div>
  </el-dialog>
</template>
<script>
//引入VueOfficeDocx组件
import VueOfficeDocx from '@vue-office/docx'
//引入相关样式
import '@vue-office/docx/lib/index.css'
export default {
  components:{
    VueOfficeDocx
  },
  data () {
    return {
      showType: '',
      docUrl: '',
      visible: false
    }
  },
  methods: {
    open (url) {
      this.visible =  true
      this.$nextTick(() => {
        this.showType = 'iframe'
        if (url.indexOf('.pdf') > -1) {
          let iframe = document.getElementById('iframe')
          iframe.src = url + '#toolbar=0'
        } else if (url.indexOf('.pptx') > -1) {
          document.getElementById('iframe').src = `${window.location.origin}${window.location.pathname}pptx/index.html?src=${url}`
        } else if (url.indexOf('.docx') > -1) {
          this.showType = 'doc'
          this.docUrl = url
        } else {
          document.getElementById('iframe').src = `https://view.officeapps.live.com/op/view.aspx?src=${url}`
        }
      })
    },
    close () {
      this.visible =  false
    }
  }
}
</script>
<style lang="less" scoped>
.global-window {
  /deep/ .el-dialog {
    height: 100%;
    margin: 0 auto;
  }
  /deep/ .el-dialog__body {
    height: calc(100% - 80px)
  }
}
.body {
  height: 100%;
  iframe {
    width: 100%;
    height: 100%;
  }
}
</style>

组件调用:

// 引入
import fileView from '@/components/fileView'
components: {
    fileView
  },
// 调用 (url就是文件的地址)
this.$refs.fileView.open(`${url}`)

特别说明: 对于.pptx需要单独判断,因为iframe对于.ppt和.pptx的地址解析方式不太一样。(fileView.vue组件代码里都有呈现)另外需要注意的是.doc格式在@vue-office里是不支持的,它只能解析.docx的内容,并且也有一定的弊端,就是如果文件内有插画,会出现渲染不出来的情况,不过毕竟是免费的,就也不要求那么多了。如果愿意花钱找个第三方完整一点的,就也可以。不过也有其他方法,后台上传文件的时候限制只能.pptx格式或者.docx格式,毕竟我们团队就这么干的。简单粗暴,完美解决~ 还怒省一大笔钱~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/751660.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Golang | Leetcode Golang题解之第201题数字范围按位与

题目&#xff1a; 题解&#xff1a; func rangeBitwiseAnd(m int, n int) int {for m < n {n & (n - 1)}return n }

C语言 | Leetcode C语言题解之第202题快乐数

题目&#xff1a; 题解&#xff1a; //计算的过程函数&#xff0c;我没重点讲&#xff0c;很简单看一下代码就好了 int getSum(int n) {int sum 0;while (n) {sum (n % 10) * (n % 10);n / 10;}return sum; }bool isHappy(int n){int sum getSum(n);int hash[820] {0};whi…

数字时代的文化革命:Facebook的社会影响

随着数字技术的飞速发展和互联网的普及&#xff0c;社交网络如今已成为人们日常生活中不可或缺的一部分。在众多社交平台中&#xff0c;Facebook作为最大的社交网络之一&#xff0c;不仅连接了全球数十亿用户&#xff0c;更深刻影响了人们的社会互动方式、文化认同和信息传播模…

BFS:队列+树的宽搜

一、二叉树的层序遍历 . - 力扣&#xff08;LeetCode&#xff09; 该题的层序遍历和以往不同的是需要一层一层去遍历&#xff0c;每一次while循环都要知道在队列中节点的个数&#xff0c;然后用一个for循环将该层节点走完了再走下一层 class Solution { public:vector<vec…

JeeSite中的数据库表动态建模与管理模块(DBM)

一、引言 在现代软件开发中&#xff0c;数据库作为系统数据存储和管理的核心&#xff0c;其设计和维护的灵活性、可扩展性对于系统的长期稳定运行至关重要。JeeSite作为一款流行的企业级快速开发平台&#xff0c;其数据库表动态管理模块&#xff08;DBM&#xff09;提供了强大…

LeetCode 585, 438, 98

目录 585. 2016年的投资题目链接表要求知识点思路代码 438. 找到字符串中所有字母异位词题目链接标签思路代码 98. 验证二叉搜索树题目链接标签合法区间思路代码 中序遍历思路代码 585. 2016年的投资 题目链接 585. 2016年的投资 表 表Insurance的字段为pid、tiv_2015、tiv…

C++ | Leetcode C++题解之第202题快乐数

题目&#xff1a; 题解&#xff1a; class Solution { public:int ProductSum(int n){int sum 0;while(n){int temp n % 10;sum temp*temp;n / 10;}return sum;}bool isHappy(int n) {int slow n,fast n;// 快慢指针&#xff0c;找环的相遇位置do{slow ProductSum(slow)…

基于weixin小程序智慧物业系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;用户管理&#xff0c;员工管理&#xff0c;房屋管理&#xff0c;缴费管理&#xff0c;车位管理&#xff0c;报修管理 工作人员账号功能包括&#xff1a;系统首页&#xff0c;维…

Unity热更方案 YooAsset+HybridCLR,纯c#开发热更,保姆级教程,从零开始

文章预览&#xff1a; 一、前言二、创建空工程三、接入HybridCLR四、接入YooAsset五、搭建本地资源服务器Nginx六、实战七、最后 一、前言 unity热更有很多方案&#xff0c;各种lua热更&#xff0c;ILRuntime等&#xff0c;这里介绍的是YooAssetHybridCLR的热更方案&#xff0…

通达信机构买卖抓牛指标公式源码

通达信机构买卖抓牛指标公式源码&#xff1a; X_1:V/CLOSE/2; X_2:SUM(IF(X_1>100 AND CLOSE>REF(CLOSE,1),X_1,0),0); X_3:SUM(IF(X_1>100 AND CLOSE<REF(CLOSE,1),X_1,0),0); X_4:SUM(IF(X_1<100 AND CLOSE>REF(CLOSE,1),X_1,0),0); X_5:SUM(IF(X_1&l…

用英文介绍巴黎:Paris, France‘s MEGACITY Europe‘s Largest City

Paris, France’s MEGACITY: Europe’s Largest City Link: https://www.youtube.com/watch?vbdObzSwVAw4&listPLmSQiOQJmbZ7TU39cyx7gizM9i8nOuZXy&index22 Paris, France is the grand megacity of Europe at the forefront of human progress. Summary Summary …

macos Automator自动操作 app, 创建自定义 应用程序 app 的方法

mac内置的这个 自动操作 automator 应用程序&#xff0c;可以帮助我们做很多的重复的工作&#xff0c;可以创建工作流&#xff0c; 可以录制并回放操作&#xff0c; 还可以帮助我们创建自定的应用程序&#xff0c;下面我们就以创建一个自定义启动参数的chrome.app为例&#xff…

vue的ESLint 4格缩进 笔记

https://chatgpt.com/share/738c8560-5271-45c4-9de0-511fad862109 一&#xff0c;代码4格缩进设置 .eslintrc.js文件 module.exports { "rules": { "indent": ["error", 4] } }; 自动修复命令 npx eslint --fix "src/**/*.{…

【秋招刷题打卡】Day03-二分系列之-二分答案

Day03-二分系列之-二分答案 给大家推荐一下咱们的 陪伴打卡小屋 知识星球啦&#xff0c;详细介绍 >笔试刷题陪伴小屋-打卡赢价值丰厚奖励 < ⏰小屋将在每日上午发放打卡题目&#xff0c;包括&#xff1a; 一道该算法的模版题 (主要以力扣&#xff0c;牛客&#xff0c;…

React 服务器渲染 Suspense 组件

React 服务器渲染支持 Suspense 组件&#xff0c;Suspense 在子组件未加载成功时会显示 fallback 组件。服务器渲染的时候&#xff0c;React 如何处理 Suspense 组件的呢&#xff1f;由于 Suspense 不同状态下&#xff0c;显示的内容不同&#xff0c;客户端展示时需要区分状态&…

GuLi商城-商品服务-API-三级分类-删除-页面效果

一步步学习Vue太慢了&#xff0c;准备跳过前端的学习&#xff0c;直接使用前端完整的项目 下载依赖npm install&#xff0c;会报错&#xff0c;排查了好久 我安装的是Node14&#xff0c;所以必须要安装4.14 Vscode终端输入&#xff1a;npm install node-sass4.14 输入&#x…

js异常处理方案

文章目录 异常处理方案同步代码的异常处理Promise 的异常处理async await 的异常处理 感谢阅读&#xff0c;觉得有帮助可以点点关注点点赞&#xff0c;谢谢&#xff01; 异常处理方案 在JS开发中&#xff0c;处理异常包括两步&#xff1a;先抛出异常&#xff0c;然后捕获异常。…

一站式uniapp优质源码项目模版交易平台的崛起与影响

一、引言 随着信息技术的飞速发展&#xff0c;软件源码已成为推动行业进步的重要力量。源码的获取、交易和流通&#xff0c;对于开发者、企业以及项目团队而言&#xff0c;具有极其重要的意义。为满足市场对高质量源码资源的迫切需求&#xff0c;一站式uniapp优质源码项目模版…

深度学习实验第T1周:实现mnist手写数字识别

>- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营](https://mp.weixin.qq.com/s/0dvHCaOoFnW8SCp3JpzKxg) 中的学习记录博客** >- **&#x1f356; 原作者&#xff1a;[K同学啊](https://mtyjkh.blog.csdn.net/)** 目录 目录 一、前言 二、我的环境 三、…

【数据集划分——针对于原先图片已经整理好类别】训练集|验证集|测试集

目标&#xff1a;用split-folders进行数据集划分 学习资源&#xff1a;https://www.youtube.com/watch?vC6wbr1jJvVs 努力的小巴掌 记录计算机视觉学习道路上的所思所得。 现在已经有了数据集&#xff0c;并且&#xff0c;注意&#xff0c;是已经划分好类别的&#xff01; …