vue-pdf插件实现pdf文档预览方式(自动分页预览)

 更新时间:2023年03月27日 09:20:52   作者:yehaocheng520  
这篇文章主要介绍了vue-pdf插件实现pdf文档预览方式(自动分页预览),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

vue-pdf插件的使用

使用vue-pdf插件实现如下效果图:

实现功能

  • 1.多个pdf预览
  • 2.获取页码,每个pdf文档实现分页预览功能

实现步骤如下:

1.npm安装

在根目录下输入一下命令:

npm i pdfjs-dist@2.5.207 --save
npm i vue-pdf@4.2.0 --save

2.全局注册或者局部注册(我这边是局部注册)——封装一个pdf预览组件

2.1 template组件内容如下:

<template>
  <div class="pdf-preview">
    <div class="head">
      <div>
        <el-button @click="last" class="mr10" :disabled="Num == 0">
          上一个</el-button
        >
        <el-button @click="next" class="mr10" :disabled="Num == url.length - 1">
          下一个</el-button
        >
        <span class="page">{{ Numnow }}/{{ NumA }}</span>
      </div>
      <div class="fenye">
        <el-button @click="downPDF" class="mr10 down">下载</el-button>
      </div>
    </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 class="tools">
      <div class="fenye">
        <el-button @click="prePage" class="mr10"> 上一页</el-button>
        <el-button @click="nextPage" class="mr10"> 下一页</el-button>
        <span class="page">{{ pageNum }}/{{ pageTotalNum }}</span>
      </div>
    </div>
  </div>
</template>

2.2 js内容如下:

<script>
import pdf from 'vue-pdf';
export default {
  name: 'pdfPreview',
  props: {
    url: {
      default: '',
      type: Array,
    },
  },
  components: {
    pdf,
  },
  data() {
    return {
      src: '', // 预览地址
      pageNum: 1, // 当前页码
      pageTotalNum: 1, // 总页数
      Num: 0,
      NumA: 0, //总个数
      Numnow: 1, //当前个数
      vuePdf: null,
    };
  },
  mounted() {
    // 有时PDF文件地址会出现跨域的情况,这里最好处理一下
    this.$nextTick(() => {
      this.NumA = this.url.length;
      var url = this.url[this.Num].fileSrc;
      this.src = pdf.createLoadingTask(url);
    });
  },
  methods: {
    last() {
      this.Numnow--;
      this.Num--;
      var url = this.url[this.Num].fileSrc;
      this.src = pdf.createLoadingTask(url);
    },
    next() {
      this.Numnow++;
      this.Num++;
      var url = this.url[this.Num].fileSrc;
      this.src = pdf.createLoadingTask(url);
    },
    // 上一页函数,
    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[this.Num].fileSrc;
      var tempLink = document.createElement('a');
      tempLink.style.display = 'none';
      // tempLink.href = url;
      window.open(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);
    },
  },
};
</script>

2.3 css内容如下:

<style lang="scss" scoped>
.pdf-preview {
  .head {
    margin-bottom: 10px;
    display: flex;
    justify-content: space-between;
  }
  .tools {
    display: flex;
    justify-content: space-between;

    .fenye {
      margin-top: 20px;
    }
  }
  .page {
    margin-left: 10px;
  }
}
</style>

3.pdf预览组件的使用

3.1 引入pdf预览组件

import PdfPreview from '@/components/PdfPreview';//路径根据实际情况调整

3.2 注册组件

components: {PdfPreview}

3.3 组件的使用

<PdfPreview :url="specificationFiles"></PdfPreview>

上面中的url的参数内容如下:

specificationFiles:[
{fileName:'产品手册1',fileSrc:'xxxx'},
{fileName:'产品手册2',fileSrc:'xxxx'},
]

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Springboot运用vue+echarts前后端交互实现动态圆环图

    Springboot运用vue+echarts前后端交互实现动态圆环图

    我们做项目的时候,常常需要一些统计图来展示我们的数据,作为web开发人员,会实现统计图是我们必会的技能。我将带大家来实现动态饼图的实现,感兴趣的可以了解一下
    2021-06-06
  • 基于vue-cli3创建libs库的实现方法

    基于vue-cli3创建libs库的实现方法

    这篇文章主要介绍了基于vue-cli3创建libs库的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • 在vue.js中使用JSZip实现在前端解压文件的方法

    在vue.js中使用JSZip实现在前端解压文件的方法

    今天小编就为大家分享一篇在vue.js中使用JSZip实现在前端解压文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • electron中使用本地数据库的方法详解

    electron中使用本地数据库的方法详解

    众所周知,electron是可以开发桌面端的框架,那我们有一些数据不想让别人看到,只能在自己的电脑上展示时怎么办呢,这个时候就可以用到本地数据库,本文将以sqlite3为例介绍一下electron如何使用本地数据库
    2023-10-10
  • vue使用require.context实现动态注册路由

    vue使用require.context实现动态注册路由

    这篇文章主要介绍了vue使用require.context实现动态注册路由的方法,帮助大家更好的理解和使用vue框架,感兴趣的朋友可以了解下
    2020-12-12
  • Vue中splice()方法对数组进行增删改等操作的实现

    Vue中splice()方法对数组进行增删改等操作的实现

    vue中对数组的元素进行删除,以前一直以为这个方法是vue中特有的,后来百度之后才知道原来是js的一个写法,下面这篇文章主要给大家介绍了关于Vue中splice()方法对数组进行增删改等操作的实现方法,需要的朋友可以参考下
    2023-05-05
  • 详解vue2如何实现点击预览本地文件

    详解vue2如何实现点击预览本地文件

    这篇文章主要为大家详细介绍了vue2如何实现点击预览本地的word、excle、pdf文件,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-04-04
  • vue项目添加多页面配置的步骤详解

    vue项目添加多页面配置的步骤详解

    公司使用 vue-cli 创建的 vue项目 在初始化时并没有做多页面配置,随着需求的不断增加,发现有必要使用多页面配置。这篇文章主要介绍了vue项目添加多页面配置,需要的朋友可以参考下
    2019-05-05
  • 详解Vue自定义指令如何实现处理图片加载失败的碎图

    详解Vue自定义指令如何实现处理图片加载失败的碎图

    这篇文章主要介绍了详解Vue自定义指令如何实现处理图片加载失败的碎图,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-02-02
  • Vue 实现展开折叠效果的示例代码

    Vue 实现展开折叠效果的示例代码

    这篇文章主要介绍了Vue 实现展开折叠效果的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08

最新评论