vue 实现页面嵌套pdf之vue-pdf插件

摘要:
近期vue移动端项目中遇到了页面内,嵌套展示pdf内容。实现方法很多种,可以用iframe嵌套,但不利于引擎优化seo。所以在网上找到了vue-pdf这个插件,这个插件非常好用,其中封装的方法也很多,属性能进行功能扩展。接下来开始使用第一步、安装npminstall--savevue-pdf第二步、使用importpdffrom'vue-pdf'exportdefault{components:{pdf},data(){return{pdfUrl:"pdf存放位置",}}注意: 1、通过importpdffrom'vue-pdf'进行引入,components:{pdf}进行注册2、可能存在跨域问题,这里的src并不能实现jsonp的功能。

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

接下来开始使用

第一步、安装

npm install --save vue-pdf

第二步、使用

<template>
<div class="pdf">
  <pdf 
    :src="pdfUrl">
  </pdf>
</div>
</template>
<script>import pdf from 'vue-pdf'export default{
  components:{
      pdf
  },
  data(){
      return{
          pdfUrl:"pdf存放位置",
      }
  }
</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、上一页下一页进行翻阅

<pdf  :src="path":page="currentPage"@progress="loadedRatio = $event"@num-pages="pageCount=$event"@page-loaded="currentPage=$event"@loaded="loadPdfHandler"ref="wrapper"class="pdf"></pdf>翻页缩小:
  <ul class="footers">
        
        <li :class="{select:idx==2}"@touchstart="idx=2"@touchend="idx=-1"@click="changePdfPage(0)">
            <p>上一页</p>
        </li>
        <li :class="{select:idx==3}"@touchstart="idx=3"@touchend="idx=-1"@click="changePdfPage(1)">
            <p>下一页</p>
        </li>
    </ul>
import pdf from "vue-pdf";
export default {
  name: "inspectionPresentation",
  components: {
    pdf
  },
  data() {
    return {
      currentPage: 0, // pdf文件页码
      pageCount: 0, // pdf文件总页数
      path: this.$route.params.path,
        scale: 100, //放大系数
                idx: -1,
                clauseTitle: "",
                loadedRatio: 0
    };
  },

        methods{
         // 改变PDF页码,val传过来区分上一页下一页的值,0上一页,1下一页
        changePdfPage(val) {
            if(val === 0 && this.currentPage > 1) {
                this.currentPage--;
            }
            if(val === 1 && this.currentPage <this.pageCount) {
                this.currentPage++;
            }
        },
        goBack() {
            this.$router.go(-1);
        },
        // pdf加载时
        loadPdfHandler(e) {
            this.currentPage = 1; // 加载的时候先加载第一页
        },
        //放大
        scaleD() {
            this.scale += 5;
            // this.$refs.wrapper.$el.style.transform = "scale("+ this.scale + ")";
            this.$refs.wrapper.$el.style.width = parseInt(this.scale) + "%";
        },

        //缩小
        scaleX() {
            if(this.scale == 100) {
                return;
            }
            this.scale += -5;
            this.$refs.wrapper.$el.style.width = parseInt(this.scale) + "%";
            // this.$refs.wrapper.$el.style.transform = "scale("+ this.scale + ")";
        },
        }

2、滚动加载、显示全部

这里写法注意点:

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

正确写法:   this.pdfSrc = pdf.createLoadingTask(this.pdfSrc)
       this.pdfSrc.promise.then(pdf => {
             this.numPages = pdf.numPages
           })
<pdf
     v-for="i in numPages":key="i":src="pdfSrc":page="i">
</pdf>import pdf from 'vue-pdf'
components: { pdf}


previewPdf(url){
     this.pdfSrc=url  
       this.pdfSrc = pdf.createLoadingTask(this.pdfSrc)
       this.pdfSrc.promise.then(pdf => {
         this.numPages = pdf.numPages
       })
 },

免责声明:文章转载自《vue 实现页面嵌套pdf之vue-pdf插件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python接口自动化测试八:更新Cookies、session保持会话(2019版本可用)Pycharm的安装,破解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Vue项目引用百度地图并实现搜索定位等功能 Marco

Tip:本篇文章为案例分析,技术点较多,所以篇幅较长,认真阅览的你一定会学到很多知识。 前言:百度地图开放平台 给开发者们提供了丰富的地图功能与服务,使我们的项目中可以轻松地实现地图定位、地址搜索、路线导航等功能。本文给大家介绍如何在vue项目中引用百度地图,并设计实现简单的地图定位、地址搜索功能。 一、效果图及功能点 先来看一下效果图 效果图看不够? 点...

vue开发环境搭建

大致分这么几个骤: 1. 安装node 、npm 、nvm 2. 安装git 、vscode 以及vscode上的一些插件 3. 安装vue-cli 以下详细来说每个步骤 1. 安装node 、 npm 、nvm    在官网下载的 node 安装包,在mac上运行会自动安装在全局目录,使用过程中经常会遇到一些权限问题,所以推荐按该网站 https://...

vue中dom元素和组件的获取

Vue中获取DOM元素 <div id="app"> <input type="button" value="获取元素" @click="getElement"> <h3 ref="myh3">今天天气真好啊</h3> </div> <...

Vue 多环境配置方法

开发应用时环境有开发环境、测试环境、生产环境等,此时我们需要配置不同的环境,获取不同的apiUrl前缀,避免了频繁手动更改api. 1.安装cross-env插件 cross-env是跨平台设置和使用环境变量的脚本。在大多数Windows命令行中在使用NODE_ENV = production设置环境变量时会报错。同样,Windows和Linux命令如何...

用vue 写h5页面-摇一摇

  vue配合其他ui框架除了开发一个完整的web项目外,也有不少的项目做一些h5的活动页面开发。你的页面现在需要模拟微信的摇一摇动作。   项目环境: vue-cli 完成的一个项目   准备插件(包):依赖的第三方的插件(后续会完成如何写vue插件的方法)shake.js ,github地址: https://github.com/alexgibson...

vue中在echarts tooltip中添加点击事件

需求:需要在echarts tooltip点击学校的名称,跳转到详情页面;项目是从上海市---> 某个区----> 具体的学校(在最后一级的tooltip中绑定一个点击事件)    ‘  项目是用vue和echarts实现的,echarts是新版本(^5.0.2),并不能把点击事件绑定在window上 解决方法: 1、设置tooltip ent...