js实现在线预览(PC)图片(jpg、png)、pdf、excel(xlsx)、docx

js实现图片预览

参考:添加链接描述

  1. 图片预览
    本来用的是element-plus自带的组件el-image,但是去不掉缩略图,所以换成了el-imag-viewer组件(图片可拖拽),由于用的vite没有require方法,需要自己处理一下图片才能显示。
    参考1:巧用element-ui自带隐藏的图片查看器el-image-viewer浏览图片(附兼容IE骚操作)
    参考2:vue3中使用require导入图片
    推荐3(未实际使用过):Vue3图片预览插件

  2. pdf预览
    用iframe自带的:src=“url”属性显示不出来pdf,未找到原因,后面绑了一个ref=“pdfRef”,使用pdfRef.value.setAttribute(‘src’,url)可以正常显示出pdf文件。
    参考:vue 在线预览 word ,Excel,pdf,图片 数据流 内网文件流 亲测有效(word 目前支持docx文件以及doc文件(doc需要后端处理))
    推荐插件:pdf.js(我没用过)

  3. Excel预览(Docx预览一样的)
    xlsx插件无问题,但是需要将arraybuffer转成文件流再做处理才可以,我没用XLSX插件,用的是vue-office插件(没有使用fetch,用的常规的post请求方式,则需要将arraybuffer转成文件流才能显示出来,对了,不能忘记设置样式高度,否则也显示不出来)。
    注意:vue-office插件只能预览xlsx格式的excel表格,不能预览xls格式的。而且有默认展示的行、列数,如果想展示更多需要自己设置,表格的宽高目前也不能自适应,看源代码有提供一个方法transformData,但需要循环遍历才能修改宽高(且宽高的值只能接收数字形式)。具体可见源码:vue-office插件属性使用说明文档
    安装vue-office插件:npm install @vue-office/excel
    xlsx插件预览excel参考:vue 在线预览 word ,Excel,pdf,图片 数据流 内网文件流 亲测有效(word 目前支持docx文件以及doc文件(doc需要后端处理))
    参考:上传文件预览
    参考npm插件文档:添加链接描述

  4. 将arraybuffer转成文件流

	let fileReader = new FileReader()
      fileReader.readAsArrayBuffer(file) // file就是接收到的arraybuffer
      fileReader.onload =  () => {
        this.src = fileReader.result
      }

参考:Blob,ArrayBuffer,File,FileReader,Buffer,TypeArray 的作用和区别
参考:二进制学习——Blob,ArrayBuffer、File、FileReader和FormData的区别

  1. XML预览
    这块没有实际用过,不确定是否可以,参考一下。
    参考:vue中预览xml并高亮显示
  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Vue应用中实现本地预览Word(.docx)、Excel(.xlsx)和PDF文件,你可以使用一些现有的库和插件。以下是一种常见的方法,使用`vue-pdf`、`xlsx`和`mammoth.js`库来实现此功能: 1. 首先,安装所需的库: ```bash npm install vue-pdf xlsx mammoth ``` 2. 创建一个Vue组件,并导入所需的库: ```vue <template> <div> <div v-if="fileType === 'pdf'"> <pdf :src="fileUrl" /> </div> <div v-else-if="fileType === 'xlsx'"> <div>{{ excelData }}</div> </div> <div v-else-if="fileType === 'docx'"> <div v-html="wordContent"></div> </div> </div> </template> <script> import { read, utils } from 'xlsx'; import mammoth from 'mammoth'; import { pdf } from 'vue-pdf'; export default { components: { pdf, }, data() { return { fileType: '', fileUrl: '', excelData: [], wordContent: '', }; }, mounted() { this.loadFile(); }, methods: { loadFile() { const file = 'path/to/your/file'; const extension = file.split('.').pop(); if (extension === 'pdf') { this.fileType = 'pdf'; this.fileUrl = file; } else if (extension === 'xlsx') { this.fileType = 'xlsx'; this.loadExcelFile(file); } else if (extension === 'docx') { this.fileType = 'docx'; this.loadWordFile(file); } }, loadExcelFile(file) { const reader = new FileReader(); reader.onload = (e) => { const data = new Uint8Array(e.target.result); const workbook = read(data, { type: 'array' }); const worksheet = workbook.Sheets[workbook.SheetNames[0]]; this.excelData = utils.sheet_to_json(worksheet, { header: 1 }); }; reader.readAsArrayBuffer(file); }, loadWordFile(file) { const reader = new FileReader(); reader.onload = (e) => { const arrayBuffer = e.target.result; const options = {}; mammoth.extractRawText({ arrayBuffer }, options) .then((result) => { this.wordContent = result.value; }) .catch((error) => { console.error(error); }); }; reader.readAsArrayBuffer(file); }, }, }; </script> ``` 在上面的代码中,你需要将`path/to/your/file`替换为实际文件的路径。根据文件的扩展名,组件将显示不同的预览方式。 请注意,该示例仅提供了一种基本实现方法。你可以根据自己的需求进行修改和调整。 希望这可以帮助到你!如果你有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值