【pdf.js】pdf檢索對應文本和高亮功能

文章目錄

    • 需求場景
      • 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;對提…