当前位置: 首页 > news >正文

预览PDF并显示当前页数

这里写目录标题

  • 步骤
  • 实例
  • 实例效果图

步骤

1.安装依赖

npm install --save vue-pdf

2.在需要的页面,引入插件

import pdf from 'vue-pdf'

3.使用
单页pdf可以直接使用

<pdf :src="获取到的pdf地址"></pdf>

多页pdf通过循环实现
html标签部分

<pdf
v-for="item in pageTotal"
:src="pdfUrl"
:key="item"
:page="item">
</pdf>

在mounted函数中 需要调用下述方法 获取pdf的总页数

// 获取pdf总页数
getTotal() {// 多页pdf的src中不能直接使用后端获取的pdf地址 否则会按页数请求多次数据// 需要使用下述方法的返回值作为urlthis.pdfUrl = pdf.createLoadingTask('获取到的pdf地址')// 获取页码this.pdfUrl.promise.then(pdf => this.pageTotal = pdf.numPages).catch(error => {})
}

此时页面即可正常实现pdf预览

实例

该实例为写公众号嵌入h5页面

需求:预览并且根据当前pdf的高度切换页数(不是根据屏幕高度切换的),返回顶部

<template><divid="top"v-loading="page==pageCount?false:true"element-loading-text="加载中"element-loading-spinner="el-icon-loading"element-loading-background="rgba(0, 0, 0, 0.8)"class="box">//当前页数和总页数<spanv-if="page==pageCount"class="pageNum">{{ currentPage }}/{{ pageCount }}</span>//显示所有pdf<VuePdfv-for="i in pageCount"ref="init":key="i":src="pdfSrc":page="i"@num-pages="page=$event"/>//返回顶部<av-if="currentPage>=3"href="#top"class="backTop"><i class="el-icon-caret-top" /></a></div>
</template>
<script>
import VuePdf from 'vue-pdf'
export default {name: 'Detail',components: {VuePdf},data() {return {loading: true,currentPage: 1,page: 1,pageCount: 0,pdfSrc: ''}},mounted() {this.getNumPages()window.addEventListener('scroll', this.handleScroll) // 监听页面滚动},// 滚动重置beforeDestroy() {window.removeEventListener('scroll', this.handleScroll)},methods: {getNumPages() {this.pdfSrc = VuePdf.createLoadingTask(this.$route.query.url)this.pdfSrc.promise.then(pdf => {console.log(pdf)this.pageCount = pdf.numPages}).catch(err => { console.error('pdf 加载失败', err) })},// 获取页面滚动距离handleScroll() {const scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTopconst height = document.body.scrollHeight / this.pageCountconst num = scrollTop / heightthis.currentPage = Math.ceil(num) === 0 ? 1 : Math.ceil(num)}}
}
</script>
<style scoped>
.box{min-height: 100vh;
}
.pageNum{position:fixed;top:1vh;left:1vh;background:rgba(0,0,0,0.5);padding:1vh 3vh;font-size: 14px;border-radius: 5px;color:#fff;z-index: 1;
}
.backTop{position: fixed;bottom: 4vh;right: 4vh;width: 6vh;height: 6vh;background: #fff;text-align: center;border-radius: 50%;line-height: 6vh;font-size: 20px;font-weight: bold;color: #0a70dd;box-shadow: 0px 0px 10px #ddd;z-index: 9;
}
</style>

实例效果图

在这里插入图片描述

http://www.lryc.cn/news/230317.html

相关文章:

  • 阿里云优惠券介绍、作用、领取入口及使用教程
  • Shell编程--流程控制
  • 设计模式-模板方法模式(Template Method)
  • 远程登录Linux方法(Linux平台相互远程;Windows远程登录Linux、远程编码、文件传输;无法远程登录的问题解决;c程序的编译)
  • macOS 13.6 及后续系统安装 Asahi Linux 将破坏引导
  • Python武器库开发-flask篇之flask框架的安装(二十一)
  • 【CASS精品教程】打开cass提示base.dcl未找到文件的解决办法
  • [vim]Python编写插件学习笔记3 - 命令行参数
  • 【仙逆】王林400年晋升元婴,复仇藤化元杀尽藤姓,高老畏罪自裁
  • 云原生实战课大纲
  • 数据湖架构
  • Zabbix 5.0部署(centos7+server+MySQL+Apache)
  • YOLO改进系列之注意力机制(CloAttention模型介绍)
  • openssl+AES开发实例(linux)
  • FreeRTOS源码阅读笔记3--queue.c
  • 云原生Kubernetes系列 | 通过容器互联搭建wordpress博客系统
  • java读取OPC DA数据---Utgard
  • 在 Android 上简单安全地登录——使用凭证管理器和密钥
  • 【Python】上市公司数据进行经典OLS回归实操
  • 科研学习|科研软件——有序多分类Logistic回归的SPSS教程!
  • 微服务简单理解与快速搭建
  • QColorDialog开发实例
  • linux实现全局快捷键
  • 共享台球室小程序系统:智能化预约与管理
  • 百度文心一言
  • 225.用队列实现栈(LeetCode)
  • 汽车FMCW毫米波雷达信号处理流程(推荐---基础详细---清楚的讲解了雷达的过程---强烈推荐)
  • 8.指令格式,指令的寻址方式
  • k8s自定义Endpoint实现内部pod访问外部应用
  • [100天算法】-分割等和子集(day 78)