近期vue移动端项目中遇到了页面内,嵌套展示pdf内容。实现方法很多种,可以用iframe嵌套,但不利于引擎优化seo。所以在网上找到了vue-pdf这个插件,这个插件非常好用,其中封装的方法也很多,属性能进行功能扩展。

接下来开始使用

第一步、安装

  1. npm install --save vue-pdf

第二步、使用

  1. <template>
  2. <div class="pdf">
  3. <pdf
  4. :src="pdfUrl">
  5. </pdf>
  6. </div>
  7. </template>
  8. <script>
  9. import pdf from 'vue-pdf'
  10. export default {
  11. components:{
  12. pdf
  13. },
  14. data(){
  15. return {
  16. pdfUrl:"pdf存放位置",
  17. }
  18. }
  19. </script>

注意: 1、通过 import pdf from 'vue-pdf' 进行引入,components:{  pdf }进行注册

    2、可能存在跨域问题,这里的src并不能实现jsonp的功能。(这里需要后端配合处理,或者自己写个代理服务器)

三、相关API

Props属性

  :src    String/Object      pdf的链接,可以是相对、绝对地址或者是一个pdf的加载任务

  :page     Number-default:1    需要展示pdf的第几页;

  :rotate    Number-default:0    pdf的旋转角度,‘90’的倍数才有效

Events回调

  @password      updatePassword,reason    updatePassword:函数提示需要输入的密码;

                               reason:提示('NEED_PASSWORD' or 'INCORRECT_PASSWORD');

  @progress      Number             pdf的页面的加载进度,Rang[0,1];

 @page-loaded      Number            pdf某个页面加载成功回调,number为页面索引值;

  @num-pages       Number            监听pdf加载,获取pdf的页数;

  @error         Object               pdf加载失败回调;

  @link-clicked       Number             单机内部链接时触发;

Public methods公共方法

print(dpi,pageList)

调用浏览器打印功能;

  • dpi打印的分辨率(100)
  • pageList需要打印的页面array

Public static methods静态方法

createLoadingTask(src)

这个方法创建一个当前pdf的加载任务,可以作为:src使用或者公开的获取当前pdf的页面总数;

四、相关示例

  由于pdf文档可能有很多页,解析时不会当做一张大图进行处理,默认只会展示第一页内容,想要全部查看需要进行特殊处理

1、上一页下一页进行翻阅

  1. <pdf :src="path" :page="currentPage" @progress="loadedRatio = $event" @num-pages="pageCount=$event" @page-loaded="currentPage=$event" @loaded="loadPdfHandler" ref="wrapper" class="pdf"></pdf>
  2. 翻页缩小:
  3. <ul class="footers">
  4.  
  5. <li :class="{select:idx==2}" @touchstart="idx=2" @touchend="idx=-1" @click="changePdfPage(0)">
  6. <p>上一页</p>
  7. </li>
  8. <li :class="{select:idx==3}" @touchstart="idx=3" @touchend="idx=-1" @click="changePdfPage(1)">
  9. <p>下一页</p>
  10. </li>
  11. </ul>
  12.  
  13. import pdf from "vue-pdf";
  14. export default {
  15. name: "inspectionPresentation",
  16. components: {
  17. pdf
  18. },
  19. data() {
  20. return {
  21. currentPage: 0, // pdf文件页码
  22. pageCount: 0, // pdf文件总页数
  23. path: this.$route.params.path,
  24. scale: 100, //放大系数
  25. idx: -1,
  26. clauseTitle: "",
  27. loadedRatio: 0
  28. };
  29. },
  30.  
  31. methods{
  32. // 改变PDF页码,val传过来区分上一页下一页的值,0上一页,1下一页
  33. changePdfPage(val) {
  34. if(val === 0 && this.currentPage > 1) {
  35. this.currentPage--;
  36. }
  37. if(val === 1 && this.currentPage < this.pageCount) {
  38. this.currentPage++;
  39. }
  40. },
  41. goBack() {
  42. this.$router.go(-1);
  43. },
  44. // pdf加载时
  45. loadPdfHandler(e) {
  46. this.currentPage = 1; // 加载的时候先加载第一页
  47. },
  48. //放大
  49. scaleD() {
  50. this.scale += 5;
  51. // this.$refs.wrapper.$el.style.transform = "scale(" + this.scale + ")";
  52. this.$refs.wrapper.$el.style.width = parseInt(this.scale) + "%";
  53. },
  54.  
  55. //缩小
  56. scaleX() {
  57. if(this.scale == 100) {
  58. return;
  59. }
  60. this.scale += -5;
  61. this.$refs.wrapper.$el.style.width = parseInt(this.scale) + "%";
  62. // this.$refs.wrapper.$el.style.transform = "scale(" + this.scale + ")";
  63. },
  64. }

2、滚动加载、显示全部

这里写法注意点:

  网上大部分写法是this.pdfSrc.then(),这种写法是不正确的,会报this.pdfSrc.then is not a function 错误

  1. 正确写法: this.pdfSrc = pdf.createLoadingTask(this.pdfSrc)
  2.       this.pdfSrc.promise.then(pdf => {
  3.     this.numPages = pdf.numPages
  4.     })
  1. <pdf
  2. v-for="i in numPages"
  3. :key="i"
  4. :src="pdfSrc"
  5. :page="i">
  6. </pdf>
  7. import pdf from 'vue-pdf'
  8. components: { pdf}
  9.  
  10. previewPdf(url){
  11. this.pdfSrc=url
  12. this.pdfSrc = pdf.createLoadingTask(this.pdfSrc)
  13. this.pdfSrc.promise.then(pdf => {
  14. this.numPages = pdf.numPages
  15. })
  16. },

vue 实现页面嵌套pdf之vue-pdf插件的更多相关文章

  1. Vue系列(2):Vue 安装

    前言:关于页面上的知识点,如有侵权,请看 这里 . 关键词:小白.Vue 安装.Vue目录结构.Vue 构建页面流程 ? 初学者安装 vue 用什么好 大家都知道,学 Vue 最好还是去官网学,官网写 ...

  2. vue 数组中嵌套的对象添加新属性--页面更新

    vue 数组中嵌套的对象添加新属性--页面更新:https://www.jianshu.com/p/8f0e5bb13735

  3. 单页面(如react,vue)网站的服务器渲染 SSR 之 SEO 大杀器 Rendertron

    单页面网站,比如vue.recat框架的网站,一般都是直接从服务器推送index.html,再根据自身路由通过js在客户端浏览器渲染出完整的html页面. 但是搜索引擎的爬虫可没有这么智能(实际上go ...

  4. vue 单页面应用实战

    1. 为什么要 SPA? SPA: 就是俗称的单页应用(Single Page Web Application). 在移动端,特别是 hybrid 方式的H5应用中,性能问题一直是痛点. 使用 SPA ...

  5. vue和jQuery嵌套实现异步ajax通信

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  6. VUE --- 给页面加点网络动态数据

    这时候的页面都是静态的(数据在写程序的时候已经固定了不能修改),而每个应用基本上都会请求外部数据以动态改变页面内容.对应有一个库叫 vue-resource 帮我们解决这个问题. 使用命令行安装 cn ...

  7. 将w3cplus网站中的文章页面提取并导出为pdf文档

    最近在看一些关于CSS3方面的知识,主要是平时看到网页中有很多用CSS3实现的很炫的效果,所以就打算系统的学习一下.在网上找到很多的文章,但都没有一个好的整理性,比较凌乱.昨天看到w3cplus网站中 ...

  8. 处理 Vue 单页面应用 SEO 的另一种思路

    vue-meta-info 官方地址: monkeyWangs/vue-meta-info (设置vue 单页面meta info信息,如果需要单页面SEO,可以和 prerender-spa-plu ...

  9. Vue单页面骨架屏实践

    github 地址: VV-UI/VV-UI 演示地址: vv-ui 文档地址:skeleton 关于骨架屏介绍 骨架屏的作用主要是在网络请求较慢时,提供基础占位,当数据加载完成,恢复数据展示.这样给 ...

随机推荐

  1. k8s二进制部署 - master节点安装

    下载kubernetes服务端 [root@hdss7-21 ~]# cd /opt/src [root@hdss7-21 src]# wget https://dl.k8s.io/v1.15.2/k ...

  2. 牛客网多校第4场 A.Ternary String 【欧拉降幂】

    题目:戳这里 学习博客:戳这里 欧拉函数的性质: ① N是不为0的整数.φ(1)=1(唯一和1互质的数就是1本身) ② 除了N=2,φ(N)都是偶数. ③ 小于N且与N互质的所有数的和是φ(n)*n/ ...

  3. oslab oranges 一个操作系统的实现 实验一

    实验目的: 搭建基本实验环境,熟悉基本开发与调试工具 对应章节:第一.二章 实验内容: 1.认真阅读章节资料 2.在实验机上安装virtualbox,并安装ubuntu 3.安装ubuntu开发环境, ...

  4. history-back

    ;!function(pkg, undefined){ //此声明函数在xback.js文件里有,在app.js里必须再声明一次,不然监听返回事件失败 var STATE = 'x-back'; va ...

  5. Leetcode(28)-实现strStr()

    实现 strStr() 函数. 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始).如果不存在,则返 ...

  6. Netty(三)基于Bio和Netty 的简易版Tomcat

    参考代码: https://github.com/FLGBetter/tomcat-rpc-demo

  7. Android 神奇的SpannableStringBuilder

    一 无图言屌 先看看神奇的效果 仅用一个TextView实现 二 SpannableStringBuilder Google官方介绍 This is the class for text whose ...

  8. ESLint & husky & git commit limit

    ESLint & husky & git commit limit 2 == error .eslintrc { "extends": "eslint-c ...

  9. Emacs和Vim:神的编辑器和编辑器之神, 到底哪个更好?

    Emacs和Vim:神的编辑器和编辑器之神, 到底哪个更好? 在这个蔚蓝色的星球上,流传着两大神器的传说:据说Emacs是神的编辑器,而Vim是编辑器之神. 一些人勇敢地拾起了Vim或Emacs,却发 ...

  10. learning 2018

    learning 2018 https://scotch.io/courses https://laod.cn/hosts/ipv6-dns.html xgqfrms 2012-2020 www.cn ...