【vue3+vue-pdf-embed】实现PDF+图片预览

【vue3+vue-pdf-embed】实现PDF+图片预览

    • 项目背景
    • 项目代码
    • 分析代码

项目背景

技术栈:vue3+Ts+elementplus
需要实现PDF和图片预览
图片预览很好解决了,可以用elementplus 自带的组件el-image 可实现
PDF预览可以用搜了一圈,有两个方案,一个是vue-office-pdf,另一个是vue-pdf-embed
由于项目需求,只需要做预览,且只支持 PDF,也不需要什么高级文档操作功能,所以我就采用了vue-pdf-embed

项目代码

html 代码

<my-dialog ref="myDialogRef" width="60%" max-height="70vh"><div v-loading="dialogLoading" class="reviewDiv"><el-image v-if="imageDialogVisible" :src="imageSrc" style="max-width: 100%;" fit="contain" /><vue-pdf-embed v-else ref="pdfRef" :source="imageSrc" :page="pdfPage" @password-requested="handlePasswordRequest" @rendered="handleDocumentRender" /><div v-show="!imageDialogVisible && pageCount" class="text-center"><el-button :disabled="pdfPage <= 1" @click="pdfPage--"></el-button><span class="mx-4">{{ pdfPage }} / {{ pageCount }}</span><el-button :disabled="pdfPage >= pageCount" @click="pdfPage++"></el-button></div></div>
</my-dialog>

js 代码

const imageSrc = ref('')
const myDialogRef = ref()
const imageDialogVisible = ref<boolean>(false)
const dialogLoading = ref<boolean>(false)
const openFileDialog = (file: any) => {dialogLoading.value = true// 释放之前创建的对象URLif (imageSrc.value) {URL?.revokeObjectURL(imageSrc.value)}// 创建新的对象URLif (file.raw) {// 本地预览imageSrc.value = URL?.createObjectURL(file.raw)dialogLoading.value = false} else {// 编辑远程预览const targetFile = getTargetFile.value(file)apiDownloadFile(targetFile[0].fileDocumentId).then((response: any) => {imageSrc.value = response.request.responseURLsetTimeout(() => {dialogLoading.value = false}, 1000)})}const isImage = judgeIcon(file) === 'image'myDialogRef.value?.openDialog(isImage ? '图片预览' : 'PDF预览')if (isImage) {imageDialogVisible.value = true} else {imageDialogVisible.value = false}
}const pdfPage = ref<number>(1)
const pageCount = ref<number>(0)
const pdfRef = ref()
function handleDocumentRender () {pageCount.value = pdfRef.value?.doc?.numPages // 这里是重点
}function handlePasswordRequest (callback: any, retry: boolean) {callback(prompt(retry ? 'Enter password again' : 'Enter password'))
}

分析代码

首先预览有本地预览和远程预览

  1. 本地预览顾名思义:就是在本地上传还没有调接口的PDF或图片进行预览,这时候通过URL 接口里面的静态方法并往里面传file.raw 便可得到 本地PDF/图片链接了
    具体请看这里URL:createObjectURL() 静态方法
  2. 远程预览:即从后端接口返回回来的PDF/图片 进行预览,这时候需要先调用下载接口 ,接口会返回 对应的链接
    通过以上两步:可以把 需要传递的 source 的值搞定

需要PDF很大,有很多页,这时候预览需要分页,但是分页的时候有一个问题,就是一直找不到对应的总页码即pageCount ,有看很多文章,要么通过rendered方法传参,但文档根据不支持传参,在这里插入图片描述
vue-pdf-embed
后面自己试了一下,居然 使用 ref 的方式 pdfRef.value?.doc?.numPages ,拿到了总页码,至此,后面就很容易解决了

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

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

相关文章

Leetcode力扣解题记录--第21题(合并链表)

题目链接&#xff1a;21. 合并两个有序链表 - 力扣&#xff08;LeetCode&#xff09; 题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&…

基于单片机的楼宇门禁系统的设计与实现

2、系统总体设计 2.1硬件的总体设计 为了使门禁系统智能化&#xff0c;需要一个主控芯片对整个门禁系统进行管理控制。接着还需要对应的模块完成包括数字密码验证和IC卡识别验证的功能。当出现非法闯入、验证失败等情况时还需要对操作人员进行警告。最后需要一个人机交互界面方…

全天候自动化数字型智能驱鸟装置,电网防鸟高科技

鸟类在输电线路铁塔、电线杆上筑巢、栖息和排泄是个大问题&#xff0c;很容易引发线路故障导致停电。为了保障电网安全稳定运行&#xff0c;会用到各种智能驱鸟装置来驱赶鸟类&#xff0c;避免涉鸟故障发生。例如全天候自动化数字型智能驱鸟装置&#xff0c;其厉害的地方在于它…

技术、生态与商业:从PC到移动的平台之争

在科技发展的漫长历史中&#xff0c;我们常常惊叹于那些改变世界的伟大技术。然而&#xff0c;深入探究会发现&#xff0c;单纯的技术领先并不能保证最终的胜利。从 PC 操作系统到移动终端&#xff0c;乃至服务器软件&#xff0c;那些最终笑傲江湖的巨头们都遵循着一个共同的法…

android JXL 导出Excel(.xls/xlsx)

前面使用过 POI 导出xlsx但是它体量比较大&#xff0c;功能较丰富&#xff0c;在一些对包size比较敏感并且导出需求相对简单的项目中就不太适合。 poi链接&#xff1a;Android 导入导出excel xls、xlsx_android excel导入导出-CSDN博客 jxl 包体积小&#xff0c;使用简单、AP…

mysql 的主从机制是怎么实现的?

MySQL 作为当前最流行的开源关系型数据库之一&#xff0c;为了满足数据的高可用、负载均衡和容灾备份等需求&#xff0c;广泛应用主从复制&#xff08;Replication&#xff09;机制。其核心思想是&#xff1a;在一台主库&#xff08;Master&#xff09;上发生的所有数据变更都会…

【PHP 函数从入门到精通】

&#x1f9e0; PHP 函数从入门到精通 PHP 函数是编程中最基础、也是最强大的工具之一。它不仅可以简化代码、提高复用性&#xff0c;还能通过各种高级用法&#xff0c;让你写出更灵活、更现代的代码。 下面我们从函数的基础讲起&#xff0c;逐步深入&#xff0c;带你掌握函数的…

CGA老年综合评估汉密尔顿抑郁量表与认知评估联用

一、CGA老年综合评估汉密尔顿抑郁量表与认知评估联用的基础CGA老年综合评估 &#xff08;一&#xff09;二者评估内容的互补性 CGA老年综合评估汉密尔顿抑郁量表主要聚焦于老年人的抑郁情绪及相关症状&#xff0c;而认知评估则着重考察老年人的记忆力、注意力、思维能力等认知…

教培机构如何开发自己的证件照拍照采集小程序

职业教培机构对学员的证件照采集是进行学生培训管理、考试报名、证书发放的前置工作&#xff0c;传统拍照和收集证件照的方式往往面临效率低、质量参差不齐等问题。开发一款专属的证件照拍照采集小程序&#xff0c;不仅能提升机构形象&#xff0c;还能大幅优化工作流程。借助“…

GC8872刷式直流电机驱动器详解:3.6A驱动能力与PWM控制

概述GC8872是一款具有故障报告功能的刷式直流电机驱动芯片&#xff0c;专为打印机、电器、工业设备等机电一体化应用设计。这款芯片采用ESOP8封装&#xff0c;集成了H桥驱动电路和多种保护功能&#xff0c;支持高达3.6A的峰值电流输出。关键特性宽电压工作范围&#xff1a;6.5V…

从0开始学习R语言--Day54--双重固定模型

对于具有空间差异的数据&#xff0c;如果不知道数据的特征关系或意义&#xff0c;直接用杜宾模型来处理是一个比较通用的思路&#xff0c;只是后续还需要很多检验去证明结果的可解释性和统计性。但如果我们已经知道特征的意义&#xff0c;比如企业经济发展的数据中有着员工的科…

三生筛法在计算数论中的极限是什么?

AI辅助创作&#xff1a;三生筛法在计算数论中的极限主要体现在‌规模边界‌、‌算法适应性‌及‌理论兼容性‌三个维度&#xff0c;其核心瓶颈与突破路径如下&#xff1a;一、规模边界&#xff1a;计算效率的断崖式衰减‌‌低维高效区的上限‌在 10^15 以内数域&#xff0c;三生…

iOS WebView 加载失败与缓存刷新问题排查实战指南

在移动 App 中嵌入网页后&#xff0c;不少团队都会遇到一个诡异的问题&#xff1a;用户看到的是“旧内容”&#xff0c;或“资源加载失败”&#xff0c;但在浏览器调试中一切正常。特别是在 iOS WebView 中&#xff0c;这类缓存和加载问题常常隐匿、难以复现。 这篇文章将通过一…

GoLand 项目从 0 到 1:第二天 —— 数据库自动化

第二天核心任务&#xff1a;自动化与多数据库支持第二天的开发聚焦于数据库自动化流程构建与MongoDB 业务链路扩展&#xff0c;通过工具化手段解决数据库操作的重复性问题&#xff0c;同时完善多数据库支持能力。经过一天的开发&#xff0c;项目已实现数据库初始化、迁移、种子…

qt框架,使用webEngine如何调试前端

解决 Qt 5.14.2 中启用开发者工具的问题问题在于 Qt 5.14.2 中 QWebEngineSettings::DeveloperExtrasEnabled 属性已被弃用或更改。正确启用开发者工具的完整方法&#xff08;Qt 5.14.2&#xff09;1. 修改 main.cpp#include <QWebEngineView> #include <QWebEngineSe…

【Atlassian生态】Jira Cloud单站点现可支持10万用户:架构升级与龙智云迁移服务

作为Atlassian全球白金合作伙伴&#xff0c;龙智团队非常激动地宣布&#xff1a;Jira迎来历史性突破——Jira Cloud单个站点最高可支持10万用户&#xff01;覆盖Enterprise、Premium和Standard版本。现在&#xff0c;更多的团队可以将Jira作为核心协作中枢&#xff0c;以加速目…

深入解析JVM垃圾回收调优:性能优化实践指南

深入解析JVM垃圾回收调优&#xff1a;性能优化实践指南 一、技术背景与应用场景 随着互联网业务的飞速发展&#xff0c;Java 应用在高并发、大内存场景下对 JVM 性能提出了更高要求。垃圾回收&#xff08;Garbage Collection&#xff0c;GC&#xff09;作为 JVM 的核心组件之一…

万字解析Redission ---深入理解Redission上锁过程

Redisson获取锁过程 RLock lock redissonClient.getLock("lock:order" userId); boolean isLock lock.tryLock(1L, TimeUnit.SECONDS);调用tyrLock其实就是下面的方法&#xff0c;如果说没有指定锁的过期时间&#xff0c;可以看到这边设置为了-1Overridepublic bo…

NVM踩坑实录:配置了npm的阿里云cdn之后,下载nodejs老版本(如:12.18.4)时,报404异常,下载失败的问题解决

文章目录一、情景还原二、分析原因三、解决方案一、情景还原 有个老项目&#xff0c;需要用到 node 的 12.18.4 版本。 小case&#xff0c;我装了 nvm 的&#xff0c;根本构不成挑战&#xff0c;敲敲命令就可以了&#xff1a; # 安装12.18.4版本的nodejs nvm install 12.18.…

优秀案例:基于python django的智能家居销售数据采集和分析系统设计与实现,使用混合推荐算法和LSTM算法情感分析

1 绪论1.1 研究的背景和意义本文所研究设计的智能家居销售数据采集与分析系统主要是为了提升数据的采集效率&#xff0c;并且实现及时采集到的线上电商平台及线下店面的多重渠道销售数据的采集与分析&#xff0c;精确地进行相关的数据采集并应用先进的数据挖掘算法进行分析挖掘…