vue-pdf插件實(shí)現(xiàn)pdf文檔預(yù)覽方式(自動(dòng)分頁(yè)預(yù)覽)
vue-pdf插件的使用
使用vue-pdf插件實(shí)現(xiàn)如下效果圖:
實(shí)現(xiàn)功能
- 1.多個(gè)pdf預(yù)覽
- 2.獲取頁(yè)碼,每個(gè)pdf文檔實(shí)現(xiàn)分頁(yè)預(yù)覽功能

實(shí)現(xiàn)步驟如下:
1.npm安裝
在根目錄下輸入一下命令:
npm i pdfjs-dist@2.5.207 --save npm i vue-pdf@4.2.0 --save
2.全局注冊(cè)或者局部注冊(cè)(我這邊是局部注冊(cè))——封裝一個(gè)pdf預(yù)覽組件
2.1 template組件內(nèi)容如下:
<template>
<div class="pdf-preview">
<div class="head">
<div>
<el-button @click="last" class="mr10" :disabled="Num == 0">
上一個(gè)</el-button
>
<el-button @click="next" class="mr10" :disabled="Num == url.length - 1">
下一個(gè)</el-button
>
<span class="page">{{ Numnow }}/{{ NumA }}</span>
</div>
<div class="fenye">
<el-button @click="downPDF" class="mr10 down">下載</el-button>
</div>
</div>
<pdf
ref="pdf"
:src="src"
:page="pageNum"
@page-loaded="pageLoaded($event)"
@num-pages="pageTotalNum = $event"
@error="pdfError($event)"
@link-clicked="page = $event"
>
</pdf>
<div class="tools">
<div class="fenye">
<el-button @click="prePage" class="mr10"> 上一頁(yè)</el-button>
<el-button @click="nextPage" class="mr10"> 下一頁(yè)</el-button>
<span class="page">{{ pageNum }}/{{ pageTotalNum }}</span>
</div>
</div>
</div>
</template>
2.2 js內(nèi)容如下:
<script>
import pdf from 'vue-pdf';
export default {
name: 'pdfPreview',
props: {
url: {
default: '',
type: Array,
},
},
components: {
pdf,
},
data() {
return {
src: '', // 預(yù)覽地址
pageNum: 1, // 當(dāng)前頁(yè)碼
pageTotalNum: 1, // 總頁(yè)數(shù)
Num: 0,
NumA: 0, //總個(gè)數(shù)
Numnow: 1, //當(dāng)前個(gè)數(shù)
vuePdf: null,
};
},
mounted() {
// 有時(shí)PDF文件地址會(huì)出現(xiàn)跨域的情況,這里最好處理一下
this.$nextTick(() => {
this.NumA = this.url.length;
var url = this.url[this.Num].fileSrc;
this.src = pdf.createLoadingTask(url);
});
},
methods: {
last() {
this.Numnow--;
this.Num--;
var url = this.url[this.Num].fileSrc;
this.src = pdf.createLoadingTask(url);
},
next() {
this.Numnow++;
this.Num++;
var url = this.url[this.Num].fileSrc;
this.src = pdf.createLoadingTask(url);
},
// 上一頁(yè)函數(shù),
prePage() {
var page = this.pageNum;
page = page > 1 ? page - 1 : this.pageTotalNum;
this.pageNum = page;
},
// 下一頁(yè)函數(shù)
nextPage() {
var page = this.pageNum;
page = page < this.pageTotalNum ? page + 1 : 1;
this.pageNum = page;
},
// 頁(yè)面加載回調(diào)函數(shù),其中e為當(dāng)前頁(yè)數(shù)
pageLoaded(e) {
this.curPageNum = e;
},
// 拋出錯(cuò)誤的回調(diào)函數(shù)。
pdfError(error) {
console.error(error);
},
downPDF() {
// 下載 pdf
var url = this.url[this.Num].fileSrc;
var tempLink = document.createElement('a');
tempLink.style.display = 'none';
// tempLink.href = url;
window.open(url);
tempLink.setAttribute('download', 'XXX.pdf');
if (typeof tempLink.download === 'undefined') {
tempLink.setAttribute('target', '_blank');
}
document.body.appendChild(tempLink);
tempLink.click();
document.body.removeChild(tempLink);
},
},
};
</script>
2.3 css內(nèi)容如下:
<style lang="scss" scoped>
.pdf-preview {
.head {
margin-bottom: 10px;
display: flex;
justify-content: space-between;
}
.tools {
display: flex;
justify-content: space-between;
.fenye {
margin-top: 20px;
}
}
.page {
margin-left: 10px;
}
}
</style>
3.pdf預(yù)覽組件的使用
3.1 引入pdf預(yù)覽組件
import PdfPreview from '@/components/PdfPreview';//路徑根據(jù)實(shí)際情況調(diào)整
3.2 注冊(cè)組件
components: {PdfPreview}3.3 組件的使用
<PdfPreview :url="specificationFiles"></PdfPreview>
上面中的url的參數(shù)內(nèi)容如下:
specificationFiles:[
{fileName:'產(chǎn)品手冊(cè)1',fileSrc:'xxxx'},
{fileName:'產(chǎn)品手冊(cè)2',fileSrc:'xxxx'},
]
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue實(shí)現(xiàn)經(jīng)典選項(xiàng)卡功能
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)經(jīng)典選項(xiàng)卡功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
vue實(shí)現(xiàn)輸入框的模糊查詢的示例代碼(節(jié)流函數(shù)的應(yīng)用場(chǎng)景)
這篇文章主要介紹了vue實(shí)現(xiàn)輸入框的模糊查詢的示例代碼(節(jié)流函數(shù)的應(yīng)用場(chǎng)景),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
Vue實(shí)現(xiàn)根據(jù)hash高亮選項(xiàng)卡
這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)根據(jù)hash高亮選項(xiàng)卡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05
解決vue中對(duì)象屬性改變視圖不更新的問(wèn)題
下面小編就為大家分享一篇解決vue中對(duì)象屬性改變視圖不更新的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-02-02
VUE+Canvas實(shí)現(xiàn)財(cái)神爺接元寶小游戲
這篇文章主要介紹了VUE+Canvas實(shí)現(xiàn)財(cái)神爺接元寶小游戲,需要的朋友可以參考下本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-04-04
vue中實(shí)現(xiàn)點(diǎn)擊空白區(qū)域關(guān)閉彈窗的兩種方法
這篇文章主要介紹了vue中實(shí)現(xiàn)點(diǎn)擊空白區(qū)域關(guān)閉彈窗的兩種方法,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下2020-12-12
詳解從Vue.js源碼看異步更新DOM策略及nextTick
本篇文章主要介紹了從Vue.js源碼看異步更新DOM策略及nextTick,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一2017-10-10
vue3中emit('update:modelValue')使用簡(jiǎn)單示例
這篇文章主要給大家介紹了關(guān)于vue3中emit('update:modelValue')使用的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-09-09

