文章参考链接(原文链接)   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>

 不分页效果图:

如有不清楚,可以查看原文章,或者评论。欢迎纠错!

Logo

前往低代码交流专区

更多推荐