vue预览本地pdf文件方法之vue-pdf组件使用

 更新时间:2024年03月21日 11:20:16   作者:菜鸟茜  
这篇文章主要介绍了vue预览本地pdf文件方法之vue-pdf组件使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

1、npm安装

npm install --save vue-pdf

2、页面引入

3、具体实现

<div class="pdf" v-show="fileType === 'pdf'">
<p class="arrow">
    <span @click="changePdfPage(0)" class="turn" 
             :class="{grey: currentPage==1}">Preview</span>
    {{currentPage}} / {{pageCount}}
    <span @click="changePdfPage(1)" class="turn" 
            :class="{grey: currentPage==pageCount}">Next</span>
</p>                              
<pdf  :src="pdfSrc" :page="currentPage" @num-pages="pageCount=$event" 
        @page-loaded="currentPage=$event"   @loaded="loadPdfHandler">
</pdf>
</div>

4、method方法

// 改变PDF页码,val传过来区分上一页下一页的值,0上一页,1下一页
      changePdfPage (val) {
        // console.log(val)
        if (val === 0 && this.currentPage > 1) {
          this.currentPage--
          // console.log(this.currentPage)
        }
        if (val === 1 && this.currentPage < this.pageCount) {
          this.currentPage++
          // console.log(this.currentPage)
        }
      },
 
      // pdf加载时
      loadPdfHandler (e) {
        this.currentPage = 1 // 加载的时候先加载第一页
      },

5、完整代码

<template>
    <div>
        <div style="text-align: left;">
        <H2>行业资料</H2>
        <el-divider>
        </el-divider>
        <el-container>
            <el-aside width="300px" style="border: 1px solid #eee;height: 1000px; background-color: #D3DCE6;">
                <div class="myTree">
                <el-tree default-expand-all :props="defaultProps" :data="tableData"  @node-click="handleNodeClick"></el-tree>
                </div>
            </el-aside>
            <el-container  style="border: 1px solid #eee;margin-left: 10px;">
                <div class="pdf" v-show="fileType === 'pdf'">
                    <p class="arrow">
                        <span :class="{grey: currentPage==1}" @click="changePdfPage(0)" class="turn">Preview</span>
                        {{currentPage}} / {{pageCount}}
                        <span :class="{grey: currentPage==pageCount}" @click="changePdfPage(1)" class="turn">Next</span>
                    </p>
                    <pdf
                            :page="currentPage"
                            :src="pdfSrc"
                            @loaded="loadPdfHandler"
                            @num-pages="pageCount=$event"
                            @page-loaded="currentPage=$event">
                    </pdf>
                </div>
            </el-container>
        </el-container>
        </div>
    </div>
</template>
<script>
  import pdf from 'vue-pdf'
 
  export default {
    name: "IndustryInformation",
    components: {pdf},
    data(){
      return {
        currentPage: 0, // pdf文件页码
        pageCount: 0, // pdf文件总页数
        fileType: 'pdf', // 文件类型
        pdfSrc: '',  // pdf文件地址
        defaultProps: {
          children: 'children',
          label: 'name'
        },
 
        tableData: [{
          id: 1,
          name: '道路工程资料',
          children:[
            {
              id: 2,
              name: '公路工程资料编制概述',
              children:[
                {
                  id: 21,
                  name: '路面工程部分分项划分表',
                  src: '/1.pdf',
                },
                {
                  id: 13,
                  name: '一般建设项目单位工程划分表',
                  src: '/2.pdf',
                },
                {
                  id: 14,
                  name: '路基工程部分分项划分表',
                  src: '/3.pdf',
                },
                {
                  id: 33,
                  name: '桥梁工程部分分项划分表',
                  src: '/4.pdf',
                },
                {
                  id: 34,
                  name: '隧道工程部分分项划分表',
                  src: '/5.pdf',
                }
              ]
            },
            {
              id: 3,
              name: '公路工程竣工资料',
              children:[
                {
                  id: 7,
                  name: '公路工程竣工文件编排层次',
                  src: '/5.pdf',
                },
                {
                  id: 8,
                  name: '工程洽商记录表',
                  src: '/4.pdf',
                },
                {
                  id: 9,
                  name: '工程设计表更、洽商一览表',
                  src: '/3.pdf',
                }
              ]
            }
          ]}]
      }
    },
    methods:{
      // 改变PDF页码,val传过来区分上一页下一页的值,0上一页,1下一页
      changePdfPage(val) {
        // console.log(val)
        if (val === 0 && this.currentPage > 1) {
          this.currentPage--
          // console.log(this.currentPage)
        }
        if (val === 1 && this.currentPage < this.pageCount) {
          this.currentPage++
          // console.log(this.currentPage)
        }
      },
 
      // pdf加载时
      loadPdfHandler(e) {
        this.currentPage = 1 // 加载的时候先加载第一页
      },
 
      handleNodeClick(data) {
        this.pdfSrc = data.src;
      }
 
    }
  }
</script>
<style scoped>
    .myTree /deep/ .el-tree {
        position: relative;
        cursor: default;
        color: #606266;
        background-color: #D3DCE6;
    }
</style>

6、最终效果

后记:

主要是priview和next翻页不是我想要的效果,因此只能另寻它法。

注意:

pdf文件需要放在public路径下任意文件夹中,不支持相对路径

总结

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

相关文章

  • Vue infinite update loop的问题解决

    Vue infinite update loop的问题解决

    这篇文章主要介绍了Vue "...infinite update loop..."的问题解决,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-04-04
  • Vue项目中如何使用Axios封装http请求详解

    Vue项目中如何使用Axios封装http请求详解

    这篇文章主要给大家介绍了关于Vue项目中如何使用Axios封装http请求的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用Vue具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-10-10
  • vue element-ui实现input输入框金额数字添加千分位

    vue element-ui实现input输入框金额数字添加千分位

    这篇文章主要介绍了vue element-ui实现input输入框金额数字添加千分位,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • 基于Vue2实现动态折扣表格

    基于Vue2实现动态折扣表格

    这篇文章主要为大家详细介绍了如何基于Vue2实现动态折扣表格,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-01-01
  • vue3中如何使用codemirror6增加代码提示功能

    vue3中如何使用codemirror6增加代码提示功能

    这篇文章主要给大家介绍了关于vue3中如何使用codemirror6增加代码提示功能的相关资料,Codemirror是一个不错的Web代码编辑库,可以方便简单的集成,需要的朋友可以参考下
    2023-08-08
  • vue-cli创建的项目,配置多页面的实现方法

    vue-cli创建的项目,配置多页面的实现方法

    下面小编就为大家分享一篇vue-cli创建的项目,配置多页面的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • Vue组件间通信方法总结(父子组件、兄弟组件及祖先后代组件间)

    Vue组件间通信方法总结(父子组件、兄弟组件及祖先后代组件间)

    这篇文章主要给大家介绍了关于Vue组件间通信的相关资料,其中包括父子组件、兄弟组件及祖先后代组件间的通信,文中通过示例代码介绍的非常详细,对大家学习或者使用Vue具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • Vue实现实时刷新时间的功能

    Vue实现实时刷新时间的功能

    这篇文章主要为大家详细介绍了如何Vue利用实现实时刷新时间的功能,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以了解下
    2023-12-12
  • vue 使用monaco实现代码高亮

    vue 使用monaco实现代码高亮

    这篇文章主要介绍了vue 使用monaco实现代码高亮的方法,帮助大家更好的理解和学习使用vue框架,感兴趣的朋友可以了解下
    2021-03-03
  • vue的template模板是如何转为render函数的过程

    vue的template模板是如何转为render函数的过程

    Vue从template到render函数的转换经历模板解析、AST构建、优化、生成渲染函数等步骤,首先进行词法分析将模板拆解为tokens,再进行语法分析构建AST,然后对AST进行静态标记和提升优化,最后转换成JavaScript渲染函数,生成虚拟DOM,完成组件的渲染和更新,实现了模板的高效转化
    2024-10-10

最新评论