Vue2问题:分享一个通用多文件类型预览库

news2024/9/21 21:59:45

前端功能问题系列文章,点击上方合集↑

序言

大家好,我是大澈!

本文约2000+字,整篇阅读大约需要3分钟。

本文主要内容分三部分,第一部分是需求分析,第二部分是实现步骤,第三部分是问题详解。

如果您只需要解决问题,请阅读第一、二部分即可。

如果您有更多时间,进一步学习问题相关知识点,请阅读至第三部分。

1. 需求分析

当我们在做文件预览功能时,往往会遇到一种糟糕的情况。

就是每预览一种类型的文件,就需要重新安装、配置、编写一个新的库来实现,很麻烦,也很繁琐。

于是,我寻找了一个可以通用的预览库,来处理这个问题。

vue-office,一个支持多种文件docx、excel、pdf预览的vue组件库,作者hit757。这个库不仅能支持vue2/3,也支持非Vue框架的预览使用。

先看一下线上演示效果,如果实现效果与项目使用不符,为节约朋友们时间,可自行选择是否向下阅读。演示地址:https://501351981.github.io/vue-office/examples/dist/#/docx

如果朋友们觉得能用,就继续往下面看看它的实现。当然,如果大家还有其他类似的通用库推荐,也欢迎留言补充,感谢学习指教。

 

图片

图片

2. 实现步骤

2.1 关于针对特定类型文件的预览库

如果不使用这种vue-office通用的多文件类型预览库,我们可能需要使用如下这些,关于针对特定类型文件的预览库,包括但不限于:

  • 预览PDF:

pdf.js:是由 Mozilla 开发的用于在浏览器中渲染PDF文件的JavaScript库。你可以使用它在Vue项目中嵌入PDF预览功能。

Vue-PDF:是一个用于在Vue项目中显示PDF文件的组件。它基于PDF.js构建,提供了简单易用的API。

  • 预览Excel:

SheetJS:是一个强大的用于处理Excel文件的JavaScript库。你可以使用它在Vue项目中读取Excel文件并显示内容。

  • 预览Word:

Mammoth.js:是一个用于将.docx文件转换为HTML的JavaScript库。你可以使用它在Vue项目中将Word文档转换为HTML并显示。

  • 预览图片:

el-image组件:预览图片的需求,用它我觉得一般就足够了。

Viewer.js:是一个强大的用于在浏览器中查看图片的JavaScript库。你可以使用它在Vue项目中实现图片预览功能。

Vue Image Viewer:是一个用于在Vue项目中实现图片查看器功能的组件。它支持缩放、旋转等功能。

2.2 vue-office预览word文件使用

安装依赖:

#docx文档预览组件
npm install @vue-office/docx vue-demi@0.13.11

如果是vue2.6版本或以下还需要额外安装 @vue/composition-api

npm install @vue/composition-api/

使用文件的网络地址预览代码:

<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>

使用上传文件预览代码(读取文件的ArrayBuffer):

<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>

使用接口返回的二进制文件预览代码:

如果后端给的不是CDN地址,而是一些POST接口,该接口返回二进制流,则可以调用接口获取文件的ArrayBuffer数据,传递给src属性。

<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>

2.3 vue-office预览excel文件使用

安装依赖:

#excel文档预览组件
npm install @vue-office/excel vue-demi@0.13.11

如果是vue2.6版本或以下还需要额外安装 @vue/composition-api

npm install @vue/composition-api/

使用文件的网络地址预览代码、使用上传文件预览代码、使用接口返回的二进制文件预览代码,基本都和word文件预览使用相同,只不过需要修改逻辑中对样式和组件对象的引用:

//引入VueOfficeExcel组件
import VueOfficeExcel from '@vue-office/excel'
//引入相关样式
import '@vue-office/excel/lib/index.css'

2.4 vue-office预览pdf文件使用

安装依赖:

#pdf文档预览组件
npm install @vue-office/pdf vue-demi@0.13.11

如果是vue2.6版本或以下还需要额外安装 @vue/composition-api

npm install @vue/composition-api/

使用文件的网络地址预览代码、使用上传文件预览代码、使用接口返回的二进制文件预览代码,基本都和word文件预览使用相同,只不过需要修改逻辑中对样式和组件对象的引用:

//引入VueOfficePdf组件
import VueOfficePdf from '@vue-office/pdf'

3. 问题详解

3.1 关于vue-office文档地址

为了朋友们阅读到此处时,方便查阅官方文档学习。

最后附上,vue-office官方文档地址:https://github.com/501351981/vue-office

关于非Vue框架的使用,也请移步参考官方文档。

结语

建立这个平台的初衷:

  • 打造一个仅包含前端问题的问答平台,让大家高效搜索处理同样问题。

  • 通过不断积累问题,一起练习逻辑思维,并顺便学习相关的知识点。

  • 遇到难题,遇到有共鸣的问题,一起讨论,一起沉淀,一起成长。

感谢关注微信公众号:“程序员大澈”,然后加入问答群,让我们一起解决实现所有BUG!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UI自动化测试神器Playwright(Java版)(保存登录cookie,解决免登录)

&#x1f3ad; Playwright在称为浏览器上下文的隔离环境中执行测试。该隔离模型提高了可重复性并防止相关联的测试脚本执行失败。测试可以加载现有的已验证状态&#xff0c;比如获取已登录的状态&#xff08;Cookie&#xff09;&#xff0c;在后续脚本中复用。这消除了在每个测…

金蝶 EAS及EAS Cloud任意文件上传漏洞复现

0x01 产品简介 金蝶EAS Cloud为集团型企业提供功能全面、性能稳定、扩展性强的数字化平台&#xff0c;帮助企业链接外部产业链上下游&#xff0c;实现信息共享、风险共担&#xff0c;优化生态圈资源配置&#xff0c;构筑产业生态的护城河&#xff0c;同时打通企业内部价值链的数…

SQL 中的 NULL 值:定义、测试和处理空数据,以及 SQL UPDATE 语句的使用

SQL NULL 值 什么是 NULL 值&#xff1f; NULL 值是指字段没有值的情况。如果表中的字段是可选的&#xff0c;那么可以插入新记录或更新记录而不向该字段添加值。此时&#xff0c;该字段将保存为 NULL 值。需要注意的是&#xff0c;NULL 值与零值或包含空格的字段不同。具有 …

MR混合现实教学系统在汽车检修与维护课堂教学中的应用

传统的汽车检修与维护课堂教学主要依赖教师口头讲解和黑板演示&#xff0c;这种方式存在一定的局限性。首先&#xff0c;对于一些复杂的机械结构和操作过程&#xff0c;教师难以生动形象地展示给学生。其次&#xff0c;学生无法直接观察到实际操作中的细节和注意事项&#xff0…

WPF Button点击鼠标左键弹出菜单

目录 ContextMenu介绍WPF实现点击鼠标左键弹出菜单如何禁用右键菜单如何修改菜单样式菜单位置设置 本篇博客介绍WPF点击按钮弹出菜单&#xff0c;效果如下&#xff1a; 菜单的位置、央视可以自定义。 实现技巧&#xff1a;不在xaml里菜单&#xff0c;在按钮左键按下的点击事件里…

锚点优化步步为赢:详细解析关键知识点和最佳实践,提升网页的关联性与权威性!

为所有文本链接使用描述性锚文本。大多数搜索引擎在对网页进行排名时都会考虑输入链接的锚文本。下面是一个锚文本示例&#xff1a; <a href"otherpage.htm" title"Anchor Title">Anchor Text</a>下面列出了一些关于锚点的注意事项&#xff1…

LabVIEW如何获取波形图上游标所在位置的数值

LabVIEW如何获取波形图上游标所在位置的数值 获取游标所在位置数值的一种方法是利用波形图的游标列表属性。 在VI的程序框图中&#xff0c;右键单击波形图并选择创建引用 &#xff0c;然后将创建的引用节点放在程序框图上。 在程序框图上放置一个属性节点&#xff0c;并将其…

C++类与对象(3)—拷贝构造函数运算符重载

目录 一、拷贝构造函数 1、定义 2、特征 3、内置与自定义类型 4、const修饰参数 5、默认生成 浅拷贝 深拷贝 6、总结 二、运算符重载 1、定义 2、判断是否相等 3、比较大小 4、赋值 5、总结 一、拷贝构造函数 1、定义 拷贝构造函数&#xff1a;只有单个形参…

多目标应用:基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度(MATLAB)

一、微网系统运行优化模型 微电网优化模型介绍&#xff1a; 微电网多目标优化调度模型简介_IT猿手的博客-CSDN博客 二、基于非支配排序的蜣螂优化算法NSDBO 基于非支配排序的蜣螂优化算法NSDBO简介&#xff1a; https://blog.csdn.net/weixin46204734/article/details/128…

如何挖掘xss漏洞

如何挖掘xss漏洞 对于如何去挖掘一个xss漏洞我是这样理解的 在实战情况下不能一上来就使用xss语句来进行测试很容易被发现 那这种情况该怎么办呢 打开准备渗透测试的web网站&#xff0c;寻找可以收集用户输入的地方比如搜索框&#xff0c;url框等 发现后寻找注入点 选在输入…

指令系统、流水线

指令系统 分类 寻址方式 设计 能够改变控制流的指令&#xff1a;分支、跳转、过程调用、过程返回 操作码设计 MIPS 流水线 MIPS流水线 改进后 取指&#xff08;IF&#xff09; 译码&#xff08;ID&#xff09; 执行&#xff08;EX&#xff09; 存储器访问 寄存器-寄存器 A…

【Kettle实战】字符串处理及网络请求JSON格式处理

经过大量的kettle操作实践&#xff0c;我们会渐渐掌握一些技巧&#xff0c;大大减轻清洗的工作量。比如在哪里 处理字符串更方便&#xff0c;在哪儿处理更合理都是一个取舍问题。 字符串拼接 MySQL中使用concat(字段1,字段2)&#xff0c;但是如果“字段2”为NULL&#xff0c;结…

基于nbiot的矿车追踪定位系统(论文+源码)

1.系统设计 鉴于智能物联网的大趋势&#xff0c;本次基于窄带物联网的矿车追踪定位系统应具备以下功能&#xff1a; &#xff08;1&#xff09;实现实时定位&#xff0c;真正实现矿车随时随地定位; &#xff08;2&#xff09;定位精度高&#xff0c;采用该系统可以实现矿车在…

Linux内核mmap内存映射详解及例子实现

mmap在linux哪里&#xff1f; 什么是mmap&#xff1f; 上图说了&#xff0c;mmap是操作这些设备的一种方法&#xff0c;所谓操作设备&#xff0c;比如IO端口&#xff08;点亮一个LED&#xff09;、LCD控制器、磁盘控制器&#xff0c;实际上就是往设备的物理地址读写数据。 但…

单链表的实现(Single Linked List)---直接拿下!

单链表的实现&#xff08;Single Linked List&#xff09;—直接拿下&#xff01; 文章目录 单链表的实现&#xff08;Single Linked List&#xff09;---直接拿下&#xff01;一、单链表的模型二、代码实现&#xff0c;接口函数实现①初始化②打印链表③创建一个结点④尾插⑤尾…

基于yolov8的车牌检测训练全流程

YOLOv8 是Ultralytics的YOLO的最新版本。作为一种前沿、最先进(SOTA)的模型&#xff0c;YOLOv8在之前版本的成功基础上引入了新功能和改进&#xff0c;以提高性能、灵活性和效率。YOLOv8支持全范围的视觉AI任务&#xff0c;包括检测, 分割, 姿态估计, 跟踪, 和分类。这种多功能…

使用element-plus 完成密码再次验证(修改密码)

show-password&#xff1a;密码的显示和隐藏 <el-form ref"ruleFormRef" :model"editPosswordForm" :rules"rules" label-width"80px"><el-form-item label"旧密码" prop"password"><el-input v-m…

echarts的使用

1. 普通版 其实主要就是option1&#xff0c;option1就是画的图 echats不能响应刷新&#xff0c;要想实时刷新监听刷新的值重新调用一下方法即可 html <div class"echart" style"width: 100%;height: calc(100% - 130px)" ref"main1">&l…

数据库存储引擎

一、MySQL体系结构 二、存储引擎-简介 存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的&#xff0c;而不是基于库的&#xff0c;所以存储引擎也可以被成为表的类型 MySQL 5.5版本之后&#xff0c;默认存储引擎就是InnoDB&#xff0c;之前…

inux 设备树 (一) 初探

Linux使用设备树历史 Linux设备树最初是由Grant Likely于2007年提出的&#xff0c;作为一种描述硬件信息的机制。在此之前&#xff0c;Linux内核通常使用硬编码的硬件信息&#xff0c;这样很难支持多种配置。然而&#xff0c;硬件的发展和复杂性不断增加&#xff0c;这导致了内…