VUE预览线上pdf
文章参考链接(原文链接) http://www.cnblogs.com/steamed-twisted-roll/p/9648255.html#commentform
最近做项目,遇到预览PDF这个功能,在网上找了找,大多推荐的是pdf.js,不过在Vue中还是想偷懒直接npm组件,最后找到了一个还不错的Vue-pdf 组件
引用: npm install –save vue-pdf
我将分页与不分页的代码分开写了
分页预览pdf
template代码:
<template>
<div class="pdf" v-show="fileType === \'pdf\'">
<p class="arrow">
<!--上一页-->
<span @click="changePdfPage(0)" class="turn" :class="{grey: currentPage==1}">Preview</span>
{{currentPage}} / {{pageCount}}
<!--下一页-->
<span @click="changePdfPage(1)" class="turn" :class="{grey: currentPage==pageCount}">Next</span>
</p>
<!--自己引入就可以使用,这里我的需求是做了分页功能,如果不需要分页功能,只要src就可以了-->
<!--
src需要展示的PDF地址
page当前展示的PDF页码
@num-pages文件总页码
@page-loaded一开始加载的页面
@loaded加载事件
-->
<pdf
:src="src"
:page="currentPage"
@num-pages="pageCount=$event"
@page-loaded="currentPage=$event"
@loaded="loadPdfHandler">
</pdf>
</div>
</template>
js代码:
<script> // 引入PDF
import pdf from \'vue-pdf\'
export default {
components: {pdf},
data () {
return {
currentPage: 0, // pdf文件页码
pageCount: 0, // pdf文件总页数
fileType: \'pdf\', // 文件类型
src: \'\', // pdf文件地址
}
},
created: {
// 有时PDF文件地址会出现跨域的情况,这里最好处理一下
this.src = pdf.createLoadingTask(this.src)
}
method: {
// 改变PDF页码,val传过来区分上一页下一页的值,0上一页,1下一页
changePdfPage (val) {
// console.log(val)
if (val === 0 && this.currentPage > 1) {
this.currentPage--
// console.log(this.currentPage)
}
if (val === 1 && this.currentPage < this.pageCount) {
this.currentPage++
// console.log(this.currentPage)
}
},
// pdf加载时
loadPdfHandler (e) {
this.currentPage = 1 // 加载的时候先加载第一页
}
}
}
</script>
分页效果图:
不分页预览pdf
template代码:
<template>
<pdf
v-for="i in numPages"
:key="i"
:page="i"
:src="pdfUrl">
</pdf>
</template>
js代码:
<script>
import pdf from \'vue-pdf\'
export default {
data() {
return {
pdfUrl:\'\',
src: \'\', // pdf文件地址
numPages:0,
},
mounted(){
this.loadPdfHandler()
},
methods:{
async loadPdfHandler () {
//src为你服务器上存放pdf的路径
this.pdfUrl = pdf.createLoadingTask(this.src);
this.pdfUrl.then(pdf => {
this.numPages = pdf.numPages
})
}
},
components: {
pdf
},
}
</script>
不分页效果图:
如有不清楚,可以查看原文章,或者评论。欢迎纠错!