vue3移動端嵌入pdf的多種方法小結(jié)
1.使用embed嵌入
好處:簡單,代碼量少,功能齊全
缺點:有固定樣式,難以修改,不可定制
<embed class="embedPdf" :src="pdfurl" type="application/pdf">
2.使用vue-pdf-embed(pdf預(yù)覽)的形式定制嵌入pdf
優(yōu)點:除了pdf的內(nèi)容別的都可以修改,可以定制樣式
缺點:要自己手寫下載,下一頁,上一頁等功能
使用vue-pdf-embed插件展示預(yù)覽pdf(這里只能展示一頁,或者不分頁全部展示,就會是一長條,所以我們自己做分頁。
<div class="vuePdfEmbed"> <VuePdfEmbed :source="state.source" :style="scaleFun" class="vue-pdf-embed" :page="state.pageNum" width="700" /> <div class="page-tool"> <div class="page-tool-item" @click="lastPage">上一頁</div> <div class="page-tool-item">{{ state.pageNum }}/{{ state.numPages }}</div> <div class="page-tool-item" @click="nextPage">下一頁</div> <div class="page-tool-item" @click="downloadPDF">下載</div> </div> </div>
分頁的邏輯是使用vue3-pdfjs中的createLoadingTask函數(shù)獲取pdf的總頁數(shù),這個函數(shù)是一個異步函數(shù),之后會返回pdf的信息(別的信息基本沒用,只有numPages比較有用。)
import { reactive, onMounted } from "vue"; import VuePdfEmbed from "vue-pdf-embed"; import { createLoadingTask } from "vue3-pdfjs"; // 獲得總頁數(shù) const pdfurl = ref("......pdf地址") const state = reactive({ source: pdfurl, //預(yù)覽pdf文件地址 pageNum: 1, //當(dāng)前頁面 scale: 1, // 縮放比例 numPages: 0, // 總頁數(shù) }); const scaleFun = reactive({ transform:'scale('+state.scale+')' }) // 獲取上一頁 function lastPage(){ if(state.pageNum>1){ state.pageNum-- } } // 獲取下一頁 function nextPage(){ if(state.pageNum<state.numPages){ state.pageNum++ } } // 下載pdf function downloadPDF(){ fetch(encodeURI(pdfurl.value)).then(res => { res.blob().then(myBlob => { const href = URL.createObjectURL(myBlob); const a = document.createElement('a'); a.href = href; a.download = 'report'; // 下載文件重命名 a.click(); a.remove(); }); }); } onMounted(() => { // 加載異步任務(wù) const loadingTask = createLoadingTask(state.source); // 載入pdf后獲取頁數(shù) loadingTask.promise.then((pdf) => { state.numPages = pdf.numPages; });
分頁的邏輯是使用vue3-pdfjs中的createLoadingTask函數(shù)獲取pdf的總頁數(shù),這個函數(shù)是一個異步函數(shù),之后會返回pdf的信息(別的信息基本沒用,只有numPages比較有用。)
import { reactive, onMounted } from "vue"; import VuePdfEmbed from "vue-pdf-embed"; import { createLoadingTask } from "vue3-pdfjs"; // 獲得總頁數(shù) const pdfurl = ref("......pdf地址") const state = reactive({ source: pdfurl, //預(yù)覽pdf文件地址 pageNum: 1, //當(dāng)前頁面 scale: 1, // 縮放比例 numPages: 0, // 總頁數(shù) }); const scaleFun = reactive({ transform:'scale('+state.scale+')' }) // 獲取上一頁 function lastPage(){ if(state.pageNum>1){ state.pageNum-- } } // 獲取下一頁 function nextPage(){ if(state.pageNum<state.numPages){ state.pageNum++ } } // 下載pdf function downloadPDF(){ fetch(encodeURI(pdfurl.value)).then(res => { res.blob().then(myBlob => { const href = URL.createObjectURL(myBlob); const a = document.createElement('a'); a.href = href; a.download = 'report'; // 下載文件重命名 a.click(); a.remove(); }); }); } onMounted(() => { // 加載異步任務(wù) const loadingTask = createLoadingTask(state.source); // 載入pdf后獲取頁數(shù) loadingTask.promise.then((pdf) => { state.numPages = pdf.numPages; });
.vuePdfEmbed{ flex: 1; display: flex; height: 100%; flex-direction: column; } .vuePdfEmbed{ .page-tool { padding-left: 15px; padding-right: 15px; display: flex; align-items: center; background: rgb(66, 66, 66); color: white; border-radius: 19px; z-index: 100; cursor: pointer; width: 320px; align-items: center; margin: auto; justify-content: space-around; } .page-tool-item { padding: 8px 15px; padding-left: 10px; cursor: pointer; } }
到此這篇關(guān)于vue3移動端嵌入pdf的兩種辦法的文章就介紹到這了,更多相關(guān)vue3移動端嵌入pdf內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
elementUI同一頁面展示多個Dialog的實現(xiàn)
這篇文章主要介紹了elementUI同一頁面展示多個Dialog的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11動態(tài)實現(xiàn)element ui的el-table某列數(shù)據(jù)不同樣式的示例
這篇文章主要介紹了動態(tài)實現(xiàn)element ui的el-table某列數(shù)據(jù)不同樣式的示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01Vue中data傳遞函數(shù)、props接收函數(shù)及slot傳參的使用及說明
這篇文章主要介紹了Vue中data傳遞函數(shù)、props接收函數(shù)及slot傳參的使用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10解決vue3項目打包發(fā)布到服務(wù)器后訪問頁面顯示空白問題
這篇文章主要介紹了解決vue3項目打包發(fā)布到服務(wù)器后訪問頁面顯示空白問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03uniapp項目國際化標(biāo)準(zhǔn)的配置與實現(xiàn)
UniApp是一種基于Vue.js的跨平臺開發(fā)框架,可以快速地開發(fā)同時運行在多個平臺的應(yīng)用程序,這篇文章主要介紹了uniapp項目國際化標(biāo)準(zhǔn)的配置與實現(xiàn),需要的朋友可以參考下2023-11-11vue表格n-form中自定義增加必填星號的實現(xiàn)代碼
這篇文章主要介紹了vue表格n-form中自定義增加必填星號,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下2024-12-12vue2使用el-tag實現(xiàn)自定義菜單導(dǎo)航標(biāo)簽
這篇文章主要為大家詳細介紹了vue2如何使用el-tag實現(xiàn)自定義菜單導(dǎo)航標(biāo)簽,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12