当前位置: 代码网 > it编程>前端脚本>Vue.js > vue预览本地pdf文件方法之vue-pdf组件使用

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

2024年05月18日 Vue.js 我要评论
1、npm安装npm install --save vue-pdf2、页面引入3、具体实现<div class="pdf" v-show="filetype === '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路径下任意文件夹中,不支持相对路径

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com