vue-pdf的使用方式

项目的协议需要加载pdf文件,如果是ios手机,直接使用window.location = " https://xxx/xxx.pdf"就可以在浏览器自动打开pdf链接,但是安卓手机会弹出让下载的弹框,不能正常显示pdf的内容,所以改成使用vue-pdf。

附上vue-pdf的官方地址:https://www.npmjs.com/package/vue-pdf

yarn:
yarn install vue-pdf

npm:
npm install --save vue-pdf

pdfpage.vue:

<pdf  :src="pdfSrc" ></pdf>

import pdf from 'vue-pdf'
export default {
    components: {
       pdf,
    },
    data() {
      return {
        pdfSrc: '',
      }
    },
    mounted() {
       this.getNumPages("https://xxxxx.com/pdfPolicy/xxx.pdf")
    },
   methods: {
      getNumPages(url) {
        var loadingTask = pdf.createLoadingTask(url)
        loadingTask.promise.then(pdf => {
            this.pdfSrc = loadingTask
        }).catch((err) => {
            console.error('pdf加载失败')
        })
      },
   }
}

最基本的使用方式只能加载首页的内容,没有下滑和切换到下一页的功能,如果是很多页的pdf,则需要在以下两种方式中任选一种,使用户能够通过滑动或者手动切换下一页的方式查看更多内容。
ps:如果pdf的链接和项目不在同一个域名下,会存在跨域问题,打开的页面就是空白的。
我的解决方式是在与项目同域名的服务器里新建文件夹,把pdf文件放进去,这样打包项目之后就能正常浏览协议。

第一种:滑动浏览
一次性加载pdf的全部内容,弊端是页面越多加载速度越慢,有时候后面的内容先出来了,首页还只有一半。优点是最贴近直接用浏览器打开链接的样式,不用手动切换下一页

   <pdf  :src="pdfSrc"  v-for="i in numPages" :key="i"  :page="i"></pdf>

import pdf from 'vue-pdf'
export default {
    components: {
       pdf,
    },
    data() {
      return {
        pdfSrc: '',
        numPages: 1  //  pdf 文件总页数
      }
    },
    mounted() {
       this.getNumPages("https://xxxxx.com/pdfPolicy/xxx.pdf")
    },
   methods: {
      getNumPages(url) {
        var loadingTask = pdf.createLoadingTask(url)
        loadingTask.promise.then(pdf => {
            this.pdfSrc = loadingTask
            this.numPages = pdf.numPages
        }).catch((err) => {
            console.error('pdf加载失败')
        })
      },
   }
}

第二种:分页器(附带旋转、放大、缩小的方法)
这种方式更灵活,但是如果项目自身配置禁止缩放功能的话,还需要手动导入vue-meta-info

yarn add vue-meta-info

main.js:

import MetaInfo from 'vue-meta-info'
Vue.use(MetaInfo)

pdfPage.vue

<div>
   <div class="tools">
      <van-button type="default" @click.stop="prePage" class="mr10">上一页</van-button>
      <div class="page">{{pageNum}}/{{pageTotalNum}} </div>
      <van-button type="default" @click.stop="nextPage" class="mr10">下一页</van-button>
      <!-- <van-button type="default" @click.stop="clock" class="mr10">顺时针</van-button>
      <van-button type="default" @click.stop="counterClock" class="mr10">逆时针</van-button> 
      <van-button type="default" @click.stop="scaleBig" class="mr10">放大</van-button>
      <van-button type="default" @click.stop="scaleSmall" class="mr10">缩小</van-button>-->
   </div>
   <pdf
        :src="pdfSrc" 
        :page="pageNum"
        class="pdf"
        ref="wrapper"
        :rotate="pageRotate"  
        @progress="loadedRatio = $event"
        @page-loaded="pageLoaded($event)" 
        @num-pages="pageTotalNum=$event" 
        @error="pdfError($event)" 
        @link-clicked="page = $event">
    </pdf>
</div>

import pdf from 'vue-pdf'
import { Button } from 'vant';
export default {
    metaInfo: {   //  这里是给页面修改
          title: '',
          meta: [
            { charset: 'utf-8' },
            { name: 'viewport', content: 'width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=2,user-scalable=yes' }
          ]
      },
    components: {
       pdf,
    },
    data() {
      return {
        pdfSrc: '',
        numPages: 1  //  pdf 文件总页数
      }
    },
    mounted() {
       this.getNumPages("https://xxxxx.com/pdfPolicy/xxx.pdf")
    },
   methods: {
     getNumPages(url) {
      var loadingTask = pdf.createLoadingTask(url);
      loadingTask.promise
        .then((pdf) => {
          this.pdfSrc = loadingTask;
          this.pageTotalNum = pdf.pageTotalNum;
        })
        .catch((err) => {
          console.error("pdf加载失败");
        });
     },
    // 上一页函数,
    prePage() {
      var page = this.pageNum;
      page = page > 1 ? page - 1 : this.pageTotalNum;
      this.pageNum = page;
    },
    // 下一页函数
    nextPage() {
      var page = this.pageNum;
      page = page < this.pageTotalNum ? page + 1 : 1;
      this.pageNum = page;
    },
    // 页面顺时针翻转90度。
    clock() {
      this.pageRotate += 90;
    },
    // 页面逆时针翻转90度。
    counterClock() {
      this.pageRotate -= 90;
    },
    // 页面加载回调函数,其中e为当前页数
    pageLoaded(e) {
      this.curPageNum = e;
    },
    // 其他的一些回调函数。
    pdfError(error) {
      console.error(error);
    },
    scaleBig() {
      this.scale += 10;
      this.$refs.wrapper.$el.style.width = parseInt(this.scale) + "%";
    },
    scaleSmall() {
      if (this.scale == 100) {
        return;
      }
      this.scale += -10;
      this.$refs.wrapper.$el.style.width = parseInt(this.scale) + "%";
      // this.$refs.wrapper.$el.style.transform = "scale(" + this.scale + ")";
    },
   }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,084评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,623评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,450评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,322评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,370评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,274评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,126评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,980评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,414评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,599评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,773评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,470评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,080评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,713评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,852评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,865评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,689评论 2 354

推荐阅读更多精彩内容