vue---- H5页面 pdf,docx,excel文件预览&&下载功能

vue---- H5页面 pdf,docx,excel文件预览&&下载功能

pdf,docx,excel文件预览&&下载适用于vue2和vue3,示例为vue3

1.npm下载这些文件的插件(选择自己需要预览的进行下载)

javascript 复制代码
安装pdf组件
npm install @vue-office/pdf vue-demi

安装docx组件
npm install @vue-office/docx vue-demi

安装excel组件
npm install @vue-office/excel vue-demi

2.页面渲染完整代码,包含了预览和下载的功能

javascript 复制代码
<template>
    <view class="h-[100%] w-[100%]">
        <view class="mb-[100rpx] absolute">
            <top-nav
                title="预览"
                backShow
                :sheetShow="true"
                nameIcon="download"
                @sheetShowBtn="download"
            >
                <text class="text-[#333333] text-[28rpx]">下载</text>
            </top-nav>
        </view>

        <view class="h-[99vh] w-[100%] relative pt-[50px]">
            <view class="w-[100%] h-[100%]">
                <vue-office-pdf :src="url" v-if="type == 'pdf'" />
                <vue-office-docx :src="url" v-if="type == 'docx' || type == 'doc'" />
                <vue-office-excel :src="url" v-if="type == 'xlsx' || type == 'xls'" />
            </view>
            <!-- <iframe
                :src="'http://www.pfile.com.cn/api/profile/onlinePreview?url=' + url"
                style="width: 100%; height: 100%; border: none; margin-top: 50px"
            ></iframe> -->
        </view>
    </view>
</template>

<script setup lang="ts">
import { onLoad } from '@dcloudio/uni-app'
import { ref } from 'vue'
import VueOfficePdf from '@vue-office/pdf'
import VueOfficeDocx from '@vue-office/docx'
import VueOfficeExcel from '@vue-office/excel'

import '@vue-office/excel/lib/index.css'
import '@vue-office/docx/lib/index.css'

const url = ref('') // 文件地址
const attach_name = ref('') // 文件名
const type = ref('') // 文件类型

onLoad((options) => {
    url.value = decodeURIComponent(options.url!)
    attach_name.value = options.name
    type.value = options.type
    console.log(attach_name.value)
})

/**
 * @description: 点击下载按钮
 * @return {*}
 */
const download = () => {
    downloadFile(url.value, attach_name.value)
}

/**
 * @description:  下载文件
 * @param {*} url 链接地址
 * @param {*} fileName 文件名
 * @return {*}
 */
async function downloadFile(url, fileName) {
    try {
        const response = await fetch(url)
        if (!response.ok) {
            throw new Error('文件下载失败,状态码: ' + response.status)
        }
        // 将响应内容转换为 Blob
        const blob = await response.blob()
        // 创建 Blob URL
        const blobUrl = URL.createObjectURL(blob)
        // 创建一个隐藏的 <a> 标签
        const link = document.createElement('a')
        link.href = blobUrl
        link.download = fileName // 设置文件名
        document.body.appendChild(link)
        link.click()
        document.body.removeChild(link)
        // 释放 Blob URL
        URL.revokeObjectURL(blobUrl)
        console.log('文件下载成功:', fileName)
    } catch (error) {
        console.error('文件下载失败:', error)
    }
}
</script>

示例图片:

相关推荐
汝生淮南吾在北1 小时前
SpringBoot+Vue饭店点餐管理系统
java·vue.js·spring boot·毕业设计·毕设
JIngJaneIL6 小时前
基于Java非遗传承文化管理系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot
+VX:Fegn08956 小时前
计算机毕业设计|基于springboot + vue心理健康管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
老华带你飞10 小时前
旅游|基于Java旅游信息系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot·旅游
韭菜炒大葱10 小时前
别等了!用 Vue 3 让 AI 边想边说,字字蹦到你脸上
前端·vue.js·aigc
关关长语11 小时前
Vue本地部署包快速构建为Docker镜像
前端·vue.js·docker
一 乐11 小时前
高校评教|基于SpringBoot+vue高校学生评教系统 (源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·学习
爱分享的鱼鱼12 小时前
Vue生命周期钩子详解与实战应用
前端·vue.js
sosojie12 小时前
and+design的table前端本地分页处理
前端·vue.js
apollo_qwe12 小时前
Vue3 核心设计模式实战:5 种模式 + 可复用代码,覆盖 80% 开发场景
vue.js