文章目录

    • 需求场景
      • 1、使用pdf.js+解决pdf.js跨域
      • 2、预览方案
      • 3、检索方案
      • 4、实现效果
    • ✒️总结


需求场景

本文主要针对网页端 PDF 本地预览场景,支持通过关键字对 PDF 进行检索查询,当点击检索结果列表中的对应关键字时,可同步在预览界面中触发内容搜索 —— 不仅能精准跳转到匹配内容所在的 PDF 页码,还能对目标文字进行高亮显示。此外,方案还涵盖了 iframe 嵌入预览、文字高亮等核心功能的实现细节,并针对性解决了基于 pdf.js 开发时常见的跨域问题,为网页端 PDF 预览与检索需求提供了完整技术参考。
技术栈:pdf.js+vue3
在这里插入图片描述

1、使用pdf.js+解决pdf.js跨域

pdf.js下载地址
在这里插入图片描述

将下载的pdf.js压缩包解压并放入到项目中的public文件夹下,如下
在这里插入图片描述

在项目的 public/pdfjs/web/viewer.mjs 文件中,搜索关键词 “file origin does not match viewer’s”,找到该关键词所在的异常抛出代码段,并将其注释掉。若不进行此注释操作,会触发跨域错误,导致 PDF 文件无法正常加载预览。

在这里插入图片描述

2、预览方案

pdf.js 提供了多种 PDF 预览方案(如基于 canvas 渲染的方案),本文选用 iframe 嵌入预览方式:先将 pdf.js 部署为独立的预览网站,在生产环境中,只需通过 iframe 传入目标 PDF 文件的地址(即 fileUrl),即可快速实现 PDF 预览功能。需要注意的是,此处的 fileUrl 不仅可以是常规的文件地址,也可以是通过 URL.createObjectURL() 方法生成的文件流临时地址。

 <iframe    ref="pdfFrame" width="100%" height="100%" :src="`/pdfjs/web/viewer.html?file=${fileUrl}`" frameborder="0" id="myIframe"></iframe>

3、检索方案

封装一个handleSearch方法传入关键字文案,进行检索查询

  • 入参:接收 query(string类型,即待搜索的关键字文案),并处理空值(默认转为空字符串)。
  • 核心逻辑
    • 通过 pdfFrame.value.contentWindow 获取iframe中pdf.js预览实例的窗口对象;
    • 拿到预览实例的 findBar(搜索工具栏)对象,若存在则配置搜索参数(设置关键字、开启全量高亮、关闭大小写敏感);
    • 触发 find(执行搜索)和 highlightallchange(应用高亮)事件,完成检索与高亮;
    • 异常捕获:通过try-catch处理搜索过程中的错误,打印错误日志便于排查。
      通过关联pdf.js的原生 findBar 能力,封装成简洁的检索方法,同时通过加载状态控制和异常处理,保证搜索功能的稳定性与可用性。
/*** 接收关键字文案作为参数* @param {string} query - 要搜索的文案*/const handleSearch= (query) => {const searchText = query ||''try {// 获取PDF Viewer的相关对象const frameWindow = pdfFrame.value.contentWindow;const findBar = frameWindow.PDFViewerApplication.findBar;if (findBar) {// 设置搜索参数findBar.findField.value = searchText;findBar.highlightAll.checked = true; // 高亮所有匹配项findBar.caseSensitive.checked = false; // 不区分大小写// 搜索和高亮findBar.dispatchEvent(new Event('find'));findBar.dispatchEvent(new Event('highlightallchange'));}} catch (error) {console.error('PDF搜索失败:', error);}
};const pdfFrame = ref(null);
const isPdfLoaded = ref(false);
// 监听iframe加载完成
onMounted(() => {const frame = pdfFrame.value;//监听 iframe 加载状态,确保在 PDF 加载完成后才执行搜索操作if (frame) {frame.onload = () => {isPdfLoaded.value = true;console.log('PDF viewer loaded successfully');};}
});

使用

handleSearch('你要查询的文案')

4、实现效果

在这里插入图片描述

✒️总结

如果这篇【文章】有帮助到你💖,希望可以给我点个赞👍,创作不易,如果有对前端端或者对python感兴趣的朋友,请多多关注💖💖💖,咱们一起探讨和努力!!!
👨‍🔧 个人主页 : 前端初见

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

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

相关文章

kafka--基础知识点--9.1--consumer 至多一次、至少一次、精确一次

1 自动提交 1.1 原理&#xff1a; Kafka 消费者后台线程每隔 auto.commit.interval.ms 自动提交最近一次 poll() 的 offset 无需开发者干预 1.2 示例&#xff1a; enable.auto.committrue auto.commit.interval.ms5000 # 每 5 秒自动提交一次 from confluent_kafka import Con…

Python中的类:从入门到实战,掌握面向对象编程的核心

目录 一、类的概念&#xff1a;从“模板”到“个体” 1.1 什么是类&#xff1f; 1.2 类与对象的关系&#xff1a;模板与实例 1.3 类的核心价值&#xff1a;封装与抽象 二、类的形式&#xff1a;Python中的类定义语法 2.1 类的基本定义 2.2 关键组成解析 &#xff08;1&a…

用户争夺与智能管理:定制开发开源AI智能名片S2B2C商城小程序的战略价值与实践路径

摘要 在零售行业数字化转型的浪潮中&#xff0c;用户争夺已从传统流量竞争转向对用户24小时时间分配权的深度渗透。本文以定制开发开源AI智能名片S2B2C商城小程序为核心研究对象&#xff0c;系统探讨其通过技术赋能重构用户接触场景、提升转化效率、增强会员黏性的作用机制。结…

数学_向量投影相关

Part 1 你的问题是&#xff1a;设相机光心的朝向 w (0, 0, 1)&#xff08;即朝向正前方&#xff0c;Z 轴正方向&#xff09;&#xff0c; 在 相机坐标系下有一个平面&#xff0c;其法向量为 n_cam&#xff0c; 问&#xff1a;w 在该平面上的投影的单位向量 w_p&#xff0c;是不…

从RTSP到HLS:构建一个简单的流媒体转换服务(java spring)

从RTSP到HLS&#xff1a;构建一个简单的流媒体转换服务(java spring) 在当今的网络环境中&#xff0c;实时视频流媒体应用越来越广泛&#xff0c;从在线直播到安防监控&#xff0c;都离不开流媒体技术的支持。然而&#xff0c;不同的流媒体协议有着各自的特点和适用场景。本文…

【代码随想录算法训练营——Day15】二叉树——110.平衡二叉树、257.二叉树的所有路径、404.左叶子之和、222.完全二叉树的节点个数

LeetCode题目链接 https://leetcode.cn/problems/balanced-binary-tree/ https://leetcode.cn/problems/binary-tree-paths/ https://leetcode.cn/problems/sum-of-left-leaves/ https://leetcode.cn/problems/count-complete-tree-nodes/ 题解 110.平衡二叉树想到用左子树的高…

JVM新生代/老年代垃圾回收器、内存分配与回收策略

新生代垃圾收集器 1. Serial收集器 serial收集器即串行收集器&#xff0c;是一个单线程收集器。 串行收集器在进行垃圾回收时只使用一个CPU或一条收集线程去完成垃圾回收工作&#xff0c;并且会暂停其他的工作线程&#xff08;stop the world&#xff09;&#xff0c;直至回收完…

Unity Mirror 多人同步 基础教程

Unity Mirror 多人同步 基础教程MirrorNetworkManager&#xff08;网络管理器&#xff09;Configuration&#xff1a;配置Auto-Start Options&#xff1a;自动启动Scene Management&#xff1a;场景管理Network Info&#xff1a;网络信息Authentication&#xff1a;身份验证Pla…

基于红尾鹰优化的LSTM深度学习网络模型(RTH-LSTM)的一维时间序列预测算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.部分程序 4.算法理论概述 5.完整程序 1.程序功能描述 红尾鹰优化的LSTM&#xff08;RTH-LSTM&#xff09;算法&#xff0c;是将红尾鹰优化算法&#xff08;Red-Tailed Hawk Optimization, RTHO&#xff09;与长短期…

深度学习“调参”黑话手册:学习率、Batch Size、Epoch都是啥?

点击 “AladdinEdu&#xff0c;同学们用得起的【H卡】算力平台”&#xff0c;注册即送-H卡级别算力&#xff0c;80G大显存&#xff0c;按量计费&#xff0c;灵活弹性&#xff0c;顶级配置&#xff0c;学生更享专属优惠。 引言&#xff1a;从"炼丹"到科学&#xff0c;…

【网络实验】-MUX-VLAN

实验拓扑实验要求&#xff1a; 在企业网络中&#xff0c;企业员工和企业客户可以访问企业的服务器&#xff0c;对于企业来说&#xff0c;希望员工之间可以互相交流&#xff0c;但是企业用户之间相互隔离&#xff0c;不能够访问。为了实现所有用户都可以访问企业服务器&#xff…

Java泛型:类型安全的艺术与实践指南

Java泛型&#xff1a;类型安全的艺术与实践指南 前言&#xff1a;一个常见的编译错误 最近在开发中遇到了这样一个编译错误&#xff1a; Required type: Callable<Object> Provided: SalesPitchTask这个看似简单的错误背后&#xff0c;隐藏着Java泛型设计的深层哲学。今天…

UMI企业智脑 2.1.0:智能营销新引擎,图文矩阵引领内容创作新潮流

在数字营销日益激烈的今天&#xff0c;企业如何在信息洪流中脱颖而出&#xff1f;UMI企业智脑 2.1.0 的发布为企业提供了全新的解决方案。这款智能营销工具结合了先进的AI技术与数据驱动策略&#xff0c;帮助企业优化营销流程、提升效率&#xff0c;并通过图文矩阵实现内容创作…

Lustre Ceph GlusterFS NAS 需要挂载在k8s容器上,数据量少,选择哪一个存储较好

在 K8s 容器环境中&#xff0c;数据量 不大的 规模下&#xff0c;Lustre、Ceph、GlusterFS 和 NAS 的选择需结合性能需求、运维成本、扩展性和K8s 适配性综合判断。以下是针对性分析及推荐&#xff1a;一、核心对比与适用场景二、关键决策因素1. 性能需求高并发 / 高吞吐&#…

深入解析 Apache Doris 写入原理:一条数据的“落地之旅”

在日常的数据分析场景中&#xff0c;我们经常会向 Apache Doris 写入大量数据&#xff0c;无论是实时导入、批量导入&#xff0c;还是通过流式写入。但你是否想过&#xff1a;一条数据从客户端发出&#xff0c;到最终稳定落盘&#xff0c;中间到底经历了哪些步骤&#xff1f; …

基于MATLAB的视频动态目标跟踪检测实现方案

一、系统架构设计 视频动态目标跟踪系统包含以下核心模块&#xff1a; 视频输入模块&#xff1a;支持摄像头实时采集或视频文件读取预处理模块&#xff1a;灰度转换、降噪、光照补偿目标检测模块&#xff1a;背景建模、运动区域提取跟踪算法模块&#xff1a;卡尔曼滤波、粒子滤…

【Python】Python文件操作

Python文件操作 文章目录Python文件操作[toc]1.文件的编码2.文件打开、读取&#xff08;r模式&#xff09;、关闭3.文件的写入&#xff08;w模式&#xff09;4.文件的追加写入&#xff08;a模式&#xff09;5.综合案例1.文件的编码 意义&#xff1a;计算机只能识别0和1&#x…

CES Asia的“五年计划”:打造与北美展比肩的科技影响力

在全球科技产业版图中&#xff0c;展会一直是前沿技术展示、行业趋势探讨以及商业合作达成的关键平台。CES Asia&#xff08;亚洲消费电子技术展&#xff09;作为亚洲科技领域的重要展会&#xff0c;近日明确提出其“五年计划”&#xff0c;目标是打造与北美展会比肩的科技影响…

【计算机网络 | 第16篇】DNS域名工作原理

文章目录3.5 域名系统工作原理主机的标识方式&#xff1a;域名 vs IP 地址标识转换机制&#xff1a;DNS系统因特网的域名系统&#xff1a;层次域名空间&#x1f426;‍&#x1f525;顶级域名分类低级域名与管理域名与IP的区别因特网的域名系统&#xff1a;域名服务器&#x1f9…

YASKAWA安川机器人铝材焊接节气之道

在铝材焊接领域&#xff0c;保护气体的合理使用对焊接质量与成本控制至关重要。安川焊接机器人凭借高精度与稳定性成为行业常用设备&#xff0c;而WGFACS节气装置的应用&#xff0c;则为其在铝材焊接过程中实现高效节气提供了创新路径。掌握二者结合的节气之道&#xff0c;对提…