vue pdf 预览下载功能 vue-pdf

2023-11-18

开发新项目的时候遇到了合同的预览下载功能,之前没有做过,实现之后记录一下,方便以后查阅。

1. 下载 vue-pdf 插件

npm install --save vue-pdf
或者
cnpm install --save vue-pdf

2. 所需页面引入 vue-pdf

我的 pdf 预览是在弹窗中展示, 根据自己的项目实际情况来展示

<!-- 模板代码 --!>
<div class="pdfPreview">
    <el-dialog
      :close-on-click-modal="false"
      :visible.sync="dialogVisible"
      :fullscreen="true"
      :before-close="handleClose"
      title="合同预览">
      <div class="agreement_picture">
        <div class="tools">
          <el-button @click="prePage" class="mr10"> 上一页</el-button>
          <el-button @click="nextPage" class="mr10"> 下一页</el-button>
          <span class="page">{{pageNum}}/{{pageTotalNum}} </span>
          <el-button @click="handleClose" class="mr10 fl-r btn-cancel"> 取消</el-button>
          <el-button @click="downPDF" class="mr10 dowmBtn"> 下载</el-button>
        </div>
        <pdf ref="pdf" 
          :src="src" 
          :page="pageNum"
          @page-loaded="pageLoaded($event)" 
          @num-pages="pageTotalNum=$event" 
          @error="pdfError($event)" 
          @link-clicked="page = $event">
        </pdf>
      </div>
    </el-dialog>
</div>

3. js 代码

import pdf from 'vue-pdf';

export default {
  name: 'PdfPreview',
  components: {
    pdf
  },

  props: {
    dialogVisible: {
      type: Boolean,
      default: false
    }
  },

  data() {
    return {
      url: "http://storage.xuetangx.com/public_assets/xuetangx/PDF/PlayerAPI_v1.0.6.pdf", // pdf 地址(网上的pdf例子地址,此地址就是后端返回的真正需要预览的pdf地址)
      src: '', // 预览地址
      pageNum: 1, // 当前页码
      pageTotalNum: 1, // 总页数
    };
  },

  mounted () {
    // 有时PDF文件地址会出现跨域的情况,这里最好处理一下
    var url = this.url
    this.src = pdf.createLoadingTask(url);
  },

  methods: {
    // 上一页函数,
    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
    },
    // 页面加载回调函数,其中e为当前页数
    pageLoaded(e) {
      this.curPageNum = e
    },
    // 抛出错误的回调函数。
    pdfError(error) {
      console.error(error)
    },
    downPDF() { // 下载 pdf
				var url = this.url
				var tempLink = document.createElement("a");
				tempLink.style.display = "none";
				tempLink.href = url;
				tempLink.setAttribute("download", 'XXX.pdf');
				if (typeof tempLink.download === "undefined") {
					tempLink.setAttribute("target", "_blank");
				}
				document.body.appendChild(tempLink);
				tempLink.click();
				document.body.removeChild(tempLink);
        this.handleClose();
			},
    handleClose() {
      this.$emit('update:dialogVisible', false);
    }
  }
};

效果预览
在这里插入图片描述
如果对你有所帮助,欢迎大家留言交流!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue pdf 预览下载功能 vue-pdf 的相关文章

随机推荐

  • 解决查询时报的cannot be cast to com.credithc.enjoy.manager.OrderResp错误

    报的错误如下所示 14 30 54 637 ERROR http nio 8094 exec 4 127 0 0 1 f6c45349d812457bbb5e42bc3a1bc09d 1 0 com credithc enjoy manag
  • 【Python函数的递归】

    递归的定义 函数作为一种代码封装 可以被其他程序调用 当然 也可以被函数内部代码调用 这种函数定义中调用函数自身的方式称为递归 就像一个人站在装满镜子的房间中 看到的影像就是递归的结果 递归在数学和计算机应用上非常强大 能够非常简洁的解决重
  • 可视化的数据结构和算法

    转载自 http sd csdn net a 20110506 297285 html 导读 作者陈皓之前写过关于可视化排序的一篇文章 现在他又给大家罗列出可视化的数据结构和算法来供大家学习参考 文中分别从基础 索引 排序 动态编程等方面进
  • 微软句向量工具包Sent2vec

    工具介绍 What is sent2vec sent2vec maps a pair of short text strings e g sentences or query answer pairs to a pair of featur
  • 关于 OneNote 无法正常同步 问题

    问题 无法正常同步 备注 问题开始之前请刷新一下DNS缓存 https blog csdn net ljason1993 article details 83040313 看一下 无法正常同步 意思是卡同步条 一直显示同步条问题 就这个绿条
  • 如何找Ubuntu的历史版本的iso镜像文件

    目录 1 中文网站上的查找 2 英文网站上的查找 1 中文网站上的查找 中文网站为 企业开源和Linux UbuntuUbuntu是适用于企业服务器 桌面电脑 云 IoT物联网的现代化开源Linux操作系统 Ubuntu官网 https c
  • 计算机网络安全论文选题提纲,计算机网络安全毕业论文提纲

    计算机网络安全毕业论文提纲 想要写好一篇论文 首先需要一份提纲 理清思路 才能帮助你顺利的写好论文 那么 计算机网络安全毕业论文提纲又应该怎样写呢 下面是小编为大家整理的计算机网络安全毕业论文提纲 欢迎参考 题目 主标题 数据结构课程建设
  • 【软件工程】详细设计说明书

    详细设计说明书 1引言 1 1编写目的 说明编写这份详细设计说明书的目的 指出预期的读者 该文档实在概要设计的基础上 进一步的细化系统结构 展示了软件啊结构的图标 物理设计 数据结构设计 及算法设计 详细的介绍了系统各个模块是如何实现的 包
  • 【Go语言核心手册11】context.Context

    往期精选 欢迎转发 如何看待程序员35岁职业危机 Java全套学习资料 14W字 耗时半年整理 我肝了三个月 为你写出了GO核心手册 消息队列 从选型到原理 一文带你全部掌握 肝了一个月的ETCD 从Raft原理到实践 更多 11 1 内容
  • 仓储系统货位优化毕业论文【Flexsim仿真】

    一 内容简介 由堆垛机 货架 输送系统 管理系统 控制系统等组成的传统堆垛式仓储系统因为其成熟的技术和推广方式 高效等特点广泛的应用在物流 车间 制造等行业 但是堆垛机仓库每个巷道都会拥有一台堆垛机 其作业方式受到限制 鲁棒性比较差 一个巷
  • iOS 展示 gif

    gif 图 是多张依次有连续动作的图 顺时间展示的一种动态效果图 有的是均匀时间更换下一张 有的 则不是均匀时间变化 1 那么 对于均匀 时间变化的gif图 比较适合 使用 iOS 系统自带方法 imageView 的动态展示图片的方法就好
  • 30分钟掌握STL系列(三)

    30分钟掌握STL系列 三 使用迭代器编程 下面就讲一讲几种类型迭代器的编程 输入迭代器 输入迭代器是最普通的类型 输入迭代器至少能够使用 和 等 使用 来访问数据 使用 操作来递进迭代器到下一个元素或到达past the end值 为了理
  • 借助Linux中断机制的按键开关功能实现

    AlienTek的IMX6ULL开发板自带了一个按键和一个LED灯 这两个外设分别接在两个不同的GPIO端口 各自独立 我们想把按键作为灯的开关 通过按压按键来控制灯的亮灭 即灯亮时按一下则灯灭 灯灭时按一下则灯亮 这里的 按一下 是指按键
  • Vmware下Ubuntu18.04虚拟机右上角的网络图标消失连不上网络,找回方法。

    一 重新找回图标 先执行以下三段代码 在终端 Terminal 下输入 sudo service network manager stop sudo rm var lib NetworkManager NetworkManager stat
  • pandas选取数据方法

    pandas选取数据 首先创建一个3行3列的DataFrame data pd DataFrame 1 2 3 4 5 6 7 8 9 index a b c columns d e f 数据展示如下 1 按列选取数据 按照列名选取 返回一
  • 网络编程——软件架构、osi七层、TCP/UDP协议

    文章目录 一 网络编程是什么 二 软件架构 1 c s架构 2 b s架构 三 OSI七层 1 物理层 2 链路层 3 网络层 4 传输层 5 应用层 四 TCP UDP协议 1 TCP 2 UDP协议 一 网络编程是什么 一个完整计算机系
  • 解决ECharts 因X轴数据过多导致重叠显示不全的问题

    X轴 加滚动条 通过配置合适的起始位置和结束位置可以做到数据过多不重叠 数据太少也不至于很丑 定位合适的位置后还可以通过手动拉伸滚动条的长度动态的显示不同条目数 对于动态的条目数滚动条要比倾斜数据灵活太多尤其是根据时间段动态显示数据 仅此表
  • Sql中having和where的区别

    HAVING 关键字和 WHERE 关键字都可以用来过滤数据 且 HAVING 支持 WHERE 关键字中所有的操作符和语法 但是他们实现同样的功能时where效率更高 WHERE 和 HAVING 关键字存在以下几点差异 1 一般情况下
  • P8254 [NOI Online 2022 入门组] 王国比赛(二维数组巧解)

    include
  • vue pdf 预览下载功能 vue-pdf

    开发新项目的时候遇到了合同的预览下载功能 之前没有做过 实现之后记录一下 方便以后查阅 1 下载 vue pdf 插件 npm install save vue pdf 或者 cnpm install save vue pdf 2 所需页面