vue中如何使用vue-pdf及相应报错解决

Posted 小任睡不醒`

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue中如何使用vue-pdf及相应报错解决相关的知识,希望对你有一定的参考价值。

 

目录

一、安装npm 依赖

二、引入组件

1、html中使用组件

单页

多页 

2、数据处理

单页

多页 

三、项目使用--代码部分

四、报错解决


前言

  • 使用vue-pdf组件实现文件预览功能 并在文件上增加操作按钮
  • vue3不支持vue-pdf,vue3项目用pdfjs-dist

 

一、安装npm 依赖

1、在根目录下输入一下命令

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

2、修改pacakge.json文件 

"dependencies": 
  "pdfjs-dist": "2.5.207",
  "vue-pdf": "4.2.0",
  ,

二、引入组件

import pdf from 'vue-pdf'

export default 
  name: 'App',
  components: 
    pdf
  ,
  ···

1、html中使用组件

单页

<pdf :src="file"></pdf>

多页 

<pdf v-for="i in pageNum" :key="i" :src="file" :page="i"></pdf>

2、数据处理

单页

export default 
  ···
  data () 
    return 
        file: "/pdf/test.pdf"
    
  

多页 

export default 
  ···
  data () 
    return 
      file: "/pdf/test.pdf",
      pageNum: 1
    
  ,
  methods: 
    getPageNum () 
      let loadingTask = pdf.createLoadingTask(this.file)
      loadingTask.promise.then(pdf => 
        this.pageNum = pdf.numPages
      ).catch(err => 
        console.error('pdf加载失败', err);
      )
    
  ,
  mounted () 
    this.getPageNum()
  

三、项目使用--代码部分

<template>
  <div class="pdf_wrap">
    <pdf class="pdfView" v-for="item in pageNum" :key="item" :src="pdfUrl" :page="item"></pdf>
    <div class="btnCont">
      <div class="savebtn"
           @click="sign">确认</div>
    </div>
    </div>
</template>

<script>
import pdf from 'vue-pdf'
import  protocolGet  from "../../../api/validation/shareagreement";//调用的接口
export default 
  components: 
      pdf
  ,
  props: ,
  data() 
    return 
      title: this.$route.meta?.title || '',
      pdfUrl:'',
      pageNum: 1
    
  ,
  watch: ,
  computed: ,
  methods: 
    getprotocolGet()
      protocolGet().then((res)=>
        if(res.code==200)
          this.pdfUrl= res.data.contractUrl//获取到的协议展示
          this.getPageNum();//pdf分页处理
        
      )
    ,
     getPageNum () 
      let loadingTask = pdf.createLoadingTask(this.pdfUrl,withCredentials: false)
      loadingTask.promise.then(pdf => 
        this.pageNum = pdf.numPages
      ).catch(err => 
        console.error('pdf加载失败', err);
      )
    ,
    sign() 
      this.$router.push(
        path: '/xxx',
      )
    ,
  ,
  created() 
   this.getprotocolGet()
  ,
  mounted() 
    
  ,

</script>
<style>
.pdf_wrap
  height: 100%;
  padding-bottom: 1.4rem;
  background-color: #fff;

</style>
<style  scoped>
.pdf_wrap .btnCont 
  position: fixed;
  bottom: 0rem;
  left: 0;
  background-color: #fff;
  padding: 0.1rem 0 .40rem 0;
  width: 100%;
  border: 0;
  text-align: center;
  

.pdf_wrap .btnCont .savebtn
  color: #fff;
  display: inline-block;
  height: 0.8rem;
  line-height: 0.8rem;
  border-radius: 0.4rem;
  width: 6.9rem;
  margin: auto;
  font-size: 0.28rem;
  background-color: #ff0b95;

</style>

四、报错解决

1、这种情况就是跨域了找后台解决一下即可

2、 这种情况是pdf还没加载出来就去渲染导致页面pageNum找不到,调用接口加载完成后再去渲染pageNum

 

3、报这个错误加上  withCredentials: false ,报错就没有了

 

解决vue3 vue-pdf报错Uncaught (in promise) TypeError: h is not a function

在使用vue3时vue-pdf插件报错:componentFactory.js?0d60:16 Uncaught (in promise) TypeError: h is not a function

解决方法是安装vue3的插件,2的不兼容

以上是关于vue中如何使用vue-pdf及相应报错解决的主要内容,如果未能解决你的问题,请参考以下文章

解决vue3 vue-pdf报错Uncaught (in promise) TypeError: h is not a function

解决vue3 vue-pdf报错Uncaught (in promise) TypeError: h is not a function

vue-pdf使用

vue中使用vue-pdf插件显示pdf

vue-pdf插件实现pdf上传预览下载预览打印下载

vue中使用vue-pdf插件显示pdf