Vue3實現PDF在線預覽功能

?🌈個人主頁:前端青山
🔥系列專欄:Vue篇
🔖人終將被年少不可得之物困其一生

依舊青山,本期給大家帶來Vue篇專欄內容:Vue3現PDF在線預覽功能

前言

在開發中,PDF預覽和交互功能是一個常見的需求。無論是管理系統、在線教育平臺,還是企業內部的知識庫,能夠高效地展示和操作PDF文件都能極大地提升用戶體驗。本文將詳細介紹如何在Vue項目中集成PDF預覽功能,并實現基本的交互操作,如翻頁、縮放等。

該片段展示了如何使用vue-pdf-embed庫在Vue組件中嵌入PDF文件,并通過一系列方法實現頁面切換和縮放功能。

代碼解析

1. 引入依賴

首先,我們需要引入vue-pdf-embed庫來處理PDF文件的加載和渲染。此外,為了確保PDF文件路徑正確,我們還需要導入具體的PDF文件。

npm install vue-pdf-embed
import VuePdfEmbed from "vue-pdf-embed";
import testPdf from '@/assets/test.pdf'

這段代碼的作用是:

  • testPdf:指定要預覽的PDF文件路徑。
  • VuePdfEmbed:引入用于嵌入PDF文件的Vue組件。

2. 定義響應式狀態

接下來,我們定義一些響應式的變量來管理PDF的狀態,包括當前頁碼、縮放比例和總頁數等。

  const pdfLoading = ref<any>(false)const state = reactive({source:testPdf, //預覽pdf文件地址pageNum: 1, //當前頁面scale: 1, // 縮放比例numPages: 0, // 總頁數});

這段代碼的作用是:

  • pdfLoading:用于控制PDF加載時的加載動畫顯示與否。
  • state:一個響應式對象,包含PDF文件的源路徑、當前頁碼、縮放比例和總頁數。

3. 處理PDF加載事件

當PDF文件加載完成時,我們需要更新總頁數,并關閉加載動畫。

const handleDocument = (pdf:any)=>{if(pdf.numPages){pdfLoading.value = falsestate.numPages = pdf.numPages;}
}

這段代碼的作用是:

  • 檢查PDF文件是否成功加載(通過pdf.numPages判斷)。
  • 如果加載成功,則關閉加載動畫并將總頁數賦值給state.numPages

4. 實現頁面切換功能

為了方便用戶瀏覽PDF文件,我們實現了兩個方法來切換頁面:lastPagenextPage

const lastPage = () => {if (state.pageNum > 1) {state.pageNum -= 1;}
}
const nextPage = () => {if (state.pageNum < state.numPages) {state.pageNum += 1;}
}

這兩段代碼的作用是:

  • lastPage:如果當前頁碼大于1,則將頁碼減1。
  • nextPage:如果當前頁碼小于總頁數,則將頁碼加1。

5. 實現縮放功能

為了讓用戶可以調整PDF的顯示大小,我們還實現了兩個方法來控制縮放比例:pageZoomOutpageZoomIn

const pageZoomOut = () => {if (state.scale < 2) {state.scale += 0.1;}
}
const pageZoomIn = () => {if (state.scale > 1) {state.scale -= 0.1;}
}

這兩段代碼的作用是:

  • pageZoomOut:如果當前縮放比例小于2,則增加0.1。
  • pageZoomIn:如果當前縮放比例大于1,則減少0.1。

6. 組件模板部分

最后,我們在Vue組件的模板部分添加了PDF預覽區域和相關操作按鈕。

 <div class="yaxq-bottom-jcxx yawd"  v-if="yjShowIndex == 4 &&yjyaPojo.filePath"><div class="page-tool">
<div class="page-tool-item"  @click="lastPage">上一頁</div>
<div class="page-tool-item"  @click="nextPage">下一頁</div>
<div class="page-tool-item">{{state.pageNum}}/{{state.numPages}}</div>
<div class="page-tool-item" @click="pageZoomOut">放大</div><div class="page-tool-item" @click="pageZoomIn">縮小</div></div>
<div class="pdf-preview"  v-loading="pdfLoading" element-loading-text="正在加載中..."element-loading-background="rgba(122, 122, 122, 0.0)"><vue-pdf-embed :source="state.source" :style="scale" class="vue-pdf-embed" :page="state.pageNum" @loaded="handleDocument" /></div></div>
  &.yawd{display: flex;justify-content: center;position: relative;// overflow-y: auto;.page-tool {position: absolute;bottom: 0.3vw;left: 0%;padding-left: 0.25vw;padding-right: 0.25vw;display: flex;align-items: center;background: rgb(66, 66, 66);color: white;border-radius: 0.9vw;z-index: 999!important;cursor: pointer;margin-left: 50%;transform: translateX(-50%);}.page-tool-item {font-size: 0.6vw;padding: 0.5vw 0.9vw;padding-left: 0.1vw;cursor: pointer;}.pdf-preview{width: 100%;height: 100%;overflow-y:auto;position: relative;&::-webkit-scrollbar {width: 1px !important;/* Chrome, Safari, Edge */}&::-webkit-scrollbar-track {background: transparent !important;/* 滾動條軌道背景 */}&::-webkit-scrollbar-thumb {background-color: #696969;/* 滾動條滑塊顏色 */border-radius: 1px;/* 滾動條滑塊圓角 */box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);/* 滾動條滑塊陰影 */}.vue-pdf-embed{width: 100%;height: 100%;z-index: 1!important;}}}

這段HTML代碼的作用是:

  • v-if:根據條件判斷是否顯示PDF預覽區域。
  • page-tool:包含了一系列操作按鈕,用于切換頁面和調整縮放比例。
  • pdf-preview:用于顯示PDF文件,同時包含加載動畫。
  • vue-pdf-embed:嵌入PDF文件的核心組件,綁定sourcestylepage等屬性,并監聽loaded事件。

功能實現

通過上述代碼,我們已經實現了一個簡單的PDF預覽組件,具備以下功能:

  1. PDF加載:當用戶打開PDF預覽頁面時,自動加載指定的PDF文件,并顯示加載動畫。
  2. 頁面切換:用戶可以通過點擊“上一頁”和“下一頁”按鈕來瀏覽PDF的不同頁面。
  3. 縮放控制:用戶可以通過點擊“放大”和“縮小”按鈕來調整PDF的顯示大小。
  4. 狀態顯示:實時顯示當前頁碼和總頁數,幫助用戶了解瀏覽進度。

這些功能不僅提升了用戶體驗,還使得PDF文件的查看更加便捷和直觀。

結尾

通過本文的介紹,我們詳細了解了如何在Vue項目中實現PDF預覽和交互功能。從引入依賴到定義響應式狀態,再到處理加載事件和實現頁面切換、縮放功能,每一步都至關重要。希望本文能為讀者提供有價值的參考,幫助大家更好地理解和應用這一技術。

在未來的工作中,我們可以繼續探索更多優化方案,不斷提升PDF預覽組件的性能和用戶體驗。無論是通過技術創新還是設計改進,我們的目標始終是為用戶提供更加優質的服務。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/65133.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/65133.shtml
英文地址,請注明出處:http://en.pswp.cn/web/65133.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

常用的EDA 工具

1&#xff09; 邏輯設計&#xff1a; Cadence 的Verilog XL ? 模擬電路設計&#xff1a; Mentor 的Viewdraw ? 電路合成&#xff1a; Synopsys 的Design Compiler ? 電路仿真&#xff1a; Synopsys 的Hsim 和Hspice ? 人工布局&#xff1a; Cadence 的Virtuso ? 自動布局…

基于ESP32的桌面小屏幕實戰[5]:PCB下單

1. 焊接調試前準備 PCB下單 點擊“PCB下單” 檢查一下DRC 確認無錯誤之后&#xff0c;確認下單 然后就會跳轉到下面的網頁 基本上保持默認選項即可。可以看到“焊盤噴鍍”有3個選項。 在選擇表面處理工藝時&#xff0c;應綜合考慮產品的具體需求、環保法規以及成本等因素。例…

云原生架構的演變與實踐

云原生架構的演變與實踐 在現代軟件開發的時代背景下&#xff0c;云原生架構日益成為推動業務轉型的關鍵。它以云為中心的應用架構和開發思維&#xff0c;不僅包括了容器化的基本形式&#xff0c;更涉及全方位的應用管理及優化。本文將圍繞云原生的特征、遷移步驟以及模式展開…

探索現代 Web 開發中的流行技術:深入學習 Vite 的使用

在前端開發的世界中&#xff0c;構建工具扮演著越來越重要的角色。從 Webpack 到 Parcel&#xff0c;再到 Rollup&#xff0c;每個工具都有自己的獨特定位和目標。而今天&#xff0c;我們要討論的是一款近年來迅速崛起并受到廣泛歡迎的構建工具— Vite。 本文將從基本原理到實…

如何通過 6 種方式將照片從 iPhone 傳輸到戴爾 PC?

“你知道如何將iPhone上的照片轉移到電腦上嗎&#xff1f;我的iPhone上有很多照片&#xff0c;所以我想將這些照片從iPhone轉移到電腦上。請給我一些建議&#xff0c;謝謝&#xff01;” - Nirenling 在戴爾社區中發布 您的iPhone是否被各種精彩的照片和視頻占滿而存儲空間不…

『SQLite』表達式操作

摘要&#xff1a;表達式是一個或多個值、運算符和計算值的 SQL 函數的組合。SQL 表達式與公式類似&#xff0c;都寫在查詢語言中。 基本語法 SELECT column1, column2, columnN FROM table_name WHERE [CONTION | EXPRESSION];布爾表達式 SQLite 的布爾表達式在匹配單個值的…

升級 Spring Boot 3 配置講解 —— 支持斷點傳輸的文件上傳和下載功能

學會這款 &#x1f525;全新設計的 Java 腳手架 &#xff0c;從此面試不再怕&#xff01; 在現代 Web 應用中&#xff0c;文件上傳和下載是非常常見的需求。然而&#xff0c;當文件較大時&#xff0c;傳統的上傳下載方式可能會遇到網絡不穩定或傳輸中斷的問題。為了解決這些問題…

框架Tensorflow2

深度學習框架之Tensorflow2 Tensorflow2版本的介紹 Tensorflow(簡稱tf)是深度學習框架&#xff0c;大大簡化了建模的方法和步驟&#xff0c;把Keras Api當作核心&#xff0c;使用非常簡單&#xff0c;跨平臺&#xff0c;集成各種現成模型&#xff0c;eager mode使得調試起來不…

SpringBoot3-深入理解自動配置類的原理(尚硅谷SpringBoot3-雷神)

文章目錄 目錄了解自動配置 一、導入對應場景的Mean依賴&#xff1a;1、引入依賴**找到自動配置類的所有配置都存放在哪里** 二、編寫主程序&#xff1a;SpringBootApplication觀察源碼時所需要知道的幾個核心注解&#xff1a;1、觀察SpringBootApplication源碼都做了什么 三、…

Mongo高可用架構解決方案

Mongo主從復制哪些事(僅適用特定場景) 對數據強一致性要求不高的場景,一般微服務架構中不推薦 master節點可讀可寫操作,當數據有修改時,會將Oplog(操作日志)同步到所有的slave節點上。那么對于從節點來說僅只讀,所有slave節點從master節點同步數據,然而從節點之間互相…

商業領域 - 競標極簡理解

競標極簡理解 競標是一種投標過程&#xff0c;指參與者&#xff08;通常是企業或個人&#xff09;為了獲得某個項目或合同的執行權&#xff0c;向招標人&#xff08;通常是采購方或項目發起方&#xff09;提交報價和方案&#xff0c;并爭取獲得招標人的認可 競標是一種常見的招…

C#Halcon跨窗口顏色識別

機器視覺是一門讓計算機模擬人類視覺功能的學科。顏色識別在其中扮演著重要的角色&#xff0c;它旨在通過對圖像中的顏色信息進行分析&#xff0c;從而識別出圖像中的目標物體或者區域。例如&#xff0c;在水果分揀系統中&#xff0c;可以根據水果的顏色&#xff08;如蘋果的紅…

01:C語言的本質

C語言的本質 1、ARM架構與匯編2、局部變量初始化與空間分配2.1、局部變量的初始化2.1、局部變量數組初始化 3、全局變量/靜態變量初始化化與空間分配4、堆空間 1、ARM架構與匯編 ARM簡要架構如下&#xff1a;CPU&#xff0c;ARM(能讀能寫)&#xff0c;Flash&#xff08;能讀&a…

Transformer知識梳理

Transformer知識梳理 文章目錄 Transformer知識梳理什么是Transformer&#xff1f;語言模型遷移學習 Transformer結構注意力層原始結構 總結 什么是Transformer&#xff1f; 語言模型 Transformer模型本質上都是預訓練語言模型&#xff0c;大部分采用自監督學習&#xff08;S…

第29天:PHP應用弱類型脆弱Hash加密Bool類型Array數組函數轉換比較

#知識點&#xff1a; 1、安全開發-原生PHP-弱類型脆弱 2、安全開發-原生PHP-函數&數據類型 3、安全開發-原生PHP-代碼審計案例 1、 和 兩個等號是弱比較&#xff0c;使用進行對比的時候&#xff0c;php解析器就會做隱式類型轉換&#xff0c;如果兩個值的類型不相等就會把兩…

STM32F1學習——編碼器接口

一、編碼器接口 編碼器接口可以接收正交編碼器的信號&#xff0c;根據編碼器旋轉產生的正交信號脈沖&#xff0c;通過硬件自動控制CNT值的自增或自減&#xff0c;從而指出編碼器的位置、旋轉方向和旋轉速度。 每個高級定時器和通用定時器都有一個編碼器接口&#xff0c;他們會占…

如何刪除 Docker 中的懸虛鏡像?

在 Docker 中&#xff0c;懸虛鏡像&#xff08;Dangling Images&#xff09;是指那些沒有 標簽 且沒有被任何容器使用的鏡像。這些鏡像通常是由于構建過程中生成的中間層鏡像或未正確清理的鏡像殘留。刪除懸虛鏡像可以釋放磁盤空間并保持 Docker 環境的整潔。 1. 列出懸虛鏡像…

網絡安全的學習與實踐經驗(附資料合集)

學習資源 在線學習平臺&#xff1a; Hack This Site&#xff1a;提供從初學者到高級難度的挑戰任務&#xff0c;適合練習各種網絡安全技術。XCTF_OJ&#xff1a;由XCTF組委會開發的免費在線網絡安全網站&#xff0c;提供豐富的培訓材料和資源。SecurityTube&#xff1a;提供豐…

ts是什么、tsc是什么、tsx是什么、jsx是什么、scss是什么

一、TS (TypeScript): TypeScript 是一種由微軟開發的開源編程語言&#xff0c;它是 JavaScript 的一個超集&#xff0c;增加了類型系統和對ES6及以后版本新特性的支持。TypeScript 旨在解決 JavaScript 開發中的可維護性、可擴展性和大型項目中的復雜性問題。它允許開發者在編…

行業商機信息付費小程序系統開發方案

行業商機信息付費小程序系統&#xff0c;主要是整合優質行業資源&#xff0c;實時更新的商機信息。在當今信息爆炸的時代&#xff0c;精準、高效地獲取行業商機信息對于企業和個人創業者而言至關重要。 一、使用場景 日常瀏覽&#xff1a;用戶在工作間隙或閑暇時間&#xff0c…