欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

pdf.js實(shí)現(xiàn)pdf檢索對(duì)應(yīng)文本和高亮功能

 更新時(shí)間:2025年09月19日 10:27:32   作者:前端初見  
PDF.js是一個(gè)強(qiáng)大的JavaScript庫,可以在瀏覽器中渲染PDF文件,無需依賴任何第三方插件,這篇文章主要介紹了pdf.js檢索對(duì)應(yīng)文本和高亮的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

需求場景

本文主要針對(duì)網(wǎng)頁端 PDF 本地預(yù)覽場景,支持通過關(guān)鍵字對(duì) PDF 進(jìn)行檢索查詢,當(dāng)點(diǎn)擊檢索結(jié)果列表中的對(duì)應(yīng)關(guān)鍵字時(shí),可同步在預(yù)覽界面中觸發(fā)內(nèi)容搜索 —— 不僅能精準(zhǔn)跳轉(zhuǎn)到匹配內(nèi)容所在的 PDF 頁碼,還能對(duì)目標(biāo)文字進(jìn)行高亮顯示。此外,方案還涵蓋了 iframe 嵌入預(yù)覽、文字高亮等核心功能的實(shí)現(xiàn)細(xì)節(jié),并針對(duì)性解決了基于 pdf.js 開發(fā)時(shí)常見的跨域問題,為網(wǎng)頁端 PDF 預(yù)覽與檢索需求提供了完整技術(shù)參考。

技術(shù)棧:pdf.js+vue3

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

pdf.js下載地址

將下載的pdf.js壓縮包解壓并放入到項(xiàng)目中的public文件夾下,如下

在項(xiàng)目的 public/pdfjs/web/viewer.mjs 文件中,搜索關(guān)鍵詞 “file origin does not match viewer’s”,找到該關(guān)鍵詞所在的異常拋出代碼段,并將其注釋掉。若不進(jìn)行此注釋操作,會(huì)觸發(fā)跨域錯(cuò)誤,導(dǎo)致 PDF 文件無法正常加載預(yù)覽。

2、預(yù)覽方案

pdf.js 提供了多種 PDF 預(yù)覽方案(如基于 canvas 渲染的方案),本文選用 iframe 嵌入預(yù)覽方式:先將 pdf.js 部署為獨(dú)立的預(yù)覽網(wǎng)站,在生產(chǎn)環(huán)境中,只需通過 iframe 傳入目標(biāo) PDF 文件的地址(即 fileUrl),即可快速實(shí)現(xiàn) PDF 預(yù)覽功能。需要注意的是,此處的 fileUrl 不僅可以是常規(guī)的文件地址,也可以是通過 URL.createObjectURL() 方法生成的文件流臨時(shí)地址。

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

3、檢索方案

封裝一個(gè)handleSearch方法傳入關(guān)鍵字文案,進(jìn)行檢索查詢

  • 入?yún)?/strong>:接收 query(string類型,即待搜索的關(guān)鍵字文案),并處理空值(默認(rèn)轉(zhuǎn)為空字符串)。
  • 核心邏輯
    • 通過 pdfFrame.value.contentWindow 獲取iframe中pdf.js預(yù)覽實(shí)例的窗口對(duì)象;
    • 拿到預(yù)覽實(shí)例的 findBar(搜索工具欄)對(duì)象,若存在則配置搜索參數(shù)(設(shè)置關(guān)鍵字、開啟全量高亮、關(guān)閉大小寫敏感);
    • 觸發(fā) find(執(zhí)行搜索)和 highlightallchange(應(yīng)用高亮)事件,完成檢索與高亮;
    • 異常捕獲:通過try-catch處理搜索過程中的錯(cuò)誤,打印錯(cuò)誤日志便于排查。
      通過關(guān)聯(lián)pdf.js的原生 findBar 能力,封裝成簡潔的檢索方法,同時(shí)通過加載狀態(tài)控制和異常處理,保證搜索功能的穩(wěn)定性與可用性。
/**
 * 接收關(guān)鍵字文案作為參數(shù)
 * @param {string} query - 要搜索的文案
 */
 const handleSearch= (query) => {
  const searchText = query ||''
  try {
    // 獲取PDF Viewer的相關(guān)對(duì)象
    const frameWindow = pdfFrame.value.contentWindow;
    const findBar = frameWindow.PDFViewerApplication.findBar;
    if (findBar) {
      // 設(shè)置搜索參數(shù)
      findBar.findField.value = searchText;
      findBar.highlightAll.checked = true; // 高亮所有匹配項(xiàng)
      findBar.caseSensitive.checked = false; // 不區(qū)分大小寫
      
      // 搜索和高亮
      findBar.dispatchEvent(new Event('find'));
      findBar.dispatchEvent(new Event('highlightallchange'));
    }
  } catch (error) {
    console.error('PDF搜索失敗:', error);
  }
};

const pdfFrame = ref(null);
const isPdfLoaded = ref(false);
// 監(jiān)聽iframe加載完成
onMounted(() => {
  const frame = pdfFrame.value;
  //監(jiān)聽 iframe 加載狀態(tài),確保在 PDF 加載完成后才執(zhí)行搜索操作
  if (frame) {
    frame.onload = () => {
      isPdfLoaded.value = true;
      console.log('PDF viewer loaded successfully');
    };
  }
});

使用

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

4、實(shí)現(xiàn)效果

總結(jié)

到此這篇關(guān)于pdf.js實(shí)現(xiàn)pdf檢索對(duì)應(yīng)文本和高亮功能的文章就介紹到這了,更多相關(guān)pdf.js檢索對(duì)應(yīng)文本和高亮內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • javascript彈出窗口中增加確定取消按鈕

    javascript彈出窗口中增加確定取消按鈕

    本文給大家分享的是在ECShop的項(xiàng)目中使用到的一個(gè)小功能,使用JavaScript實(shí)現(xiàn)彈出窗口中增加確定取消按鈕,有需要的小伙伴可以參考下
    2016-06-06
  • js跨域資源共享 基礎(chǔ)篇

    js跨域資源共享 基礎(chǔ)篇

    這篇文章主要為大家詳細(xì)介紹了javascript跨域資源共享的相關(guān)資料,感興趣的朋友可以參考一下
    2016-07-07
  • JS數(shù)組的賦值介紹

    JS數(shù)組的賦值介紹

    本篇文章主要是對(duì)JS數(shù)組的賦值進(jìn)行了介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2014-03-03
  • 淺談Vue3.0之前你必須知道的TypeScript實(shí)戰(zhàn)技巧

    淺談Vue3.0之前你必須知道的TypeScript實(shí)戰(zhàn)技巧

    這篇文章主要介紹了淺談Vue3.0之前你必須知道的TypeScript實(shí)戰(zhàn)技巧,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • JavaScript中sliced string導(dǎo)致內(nèi)存無法釋放的解決方法

    JavaScript中sliced string導(dǎo)致內(nèi)存無法釋放的解決方法

    在現(xiàn)代JavaScript應(yīng)用中,內(nèi)存管理通常由垃圾回收機(jī)制自動(dòng)處理,開發(fā)者很少需要手動(dòng)釋放內(nèi)存,但在某些場景下,一些看似無害的代碼卻可能導(dǎo)致隱藏的內(nèi)存占用問題,這類問題之一,便是sliced string造成的內(nèi)存保留,所以本文給大家介紹了避免的方法,需要的朋友可以參考下
    2025-07-07
  • 探討js中的雙感嘆號(hào)判斷

    探討js中的雙感嘆號(hào)判斷

    js中的雙感嘆號(hào)判斷。在網(wǎng)上查了些資料,他相當(dāng)于三元運(yùn)算符,返回boolean值
    2013-11-11
  • 用document.documentElement取代document.body的原因分析

    用document.documentElement取代document.body的原因分析

    ll建議用document.documentElement代替document.body
    2009-11-11
  • 一個(gè)不錯(cuò)的仿攜程自定義數(shù)據(jù)下拉選擇select

    一個(gè)不錯(cuò)的仿攜程自定義數(shù)據(jù)下拉選擇select

    這是一個(gè)仿攜程自定義的數(shù)據(jù)下拉選擇select,對(duì)一些比較重要的參數(shù)進(jìn)行的描述,方便初學(xué)者
    2014-09-09
  • JavaScript實(shí)現(xiàn)HTML轉(zhuǎn)換為純文本的幾種方法

    JavaScript實(shí)現(xiàn)HTML轉(zhuǎn)換為純文本的幾種方法

    本文主要介紹了六種將HTML轉(zhuǎn)換為純文本的方法,包括使用DOMParser、創(chuàng)建臨時(shí)div元素、正則表達(dá)式替換、Element.textContent(瀏覽器環(huán)境)、DOMPurify庫和JSDOM庫,每種方法都有其優(yōu)缺點(diǎn),選擇合適的方法取決于具體需求和使用環(huán)境,需要的朋友可以參考下
    2025-05-05
  • JS無限樹狀列表實(shí)現(xiàn)代碼

    JS無限樹狀列表實(shí)現(xiàn)代碼

    本人水平有限,這么個(gè)東東想了好幾天才弄出來個(gè)半成品,還有一些問題沒有解決,先放上來存著備忘,也望高手指點(diǎn)一二。
    2011-01-01

最新評(píng)論