欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

前端實現(xiàn)pdf預(yù)覽功能的全過程(基于vue)

 更新時間:2023年09月17日 11:38:36   作者:多多的小寶貝  
這篇文章主要給大家介紹了關(guān)于前端實現(xiàn)pdf預(yù)覽功能的相關(guān)資料,前端實現(xiàn)預(yù)覽最好的效果還是PDF,不會出現(xiàn)一些文字錯亂和亂碼的問題,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言:

項目中之前pdf預(yù)覽是客戶端andrio實現(xiàn)的,現(xiàn)在需要前端H5自己實現(xiàn)預(yù)覽功能,項目是基于vue的H5項目,記錄一下pdf預(yù)覽功能實現(xiàn)的過程和問題

一、利用iframe實現(xiàn)pdf預(yù)覽

1、實現(xiàn)過程

將pdf路徑設(shè)置給iframe的src屬性

    <iframe :src="pdfUrl" marginWidth="0" marginHeight="0" scrolling="no" frameBorder="0" style="width: calc(100% + 17px); height: calc(100% + 17px)"></iframe>
create(){
//路由路徑上獲取pdf路徑參數(shù)
 var extension = this.$route.query.pdfSrc.split('.').pop().toLowerCase()
    console.log(extension, 'extensionextension')
    if (extension == 'pdf') {
      this.pdfSrc = `${this.$route.query.pdfSrc}#toolbar=0`
    } else {
      this.pdfSrc = 'https://view.officeapps.live.com/op/embed.aspx?src=' + this.$route.query.pdfSrc
    }
}

2、遇到的問題

電腦上測試正常,但是安卓端會出現(xiàn)空白頁和直接跳轉(zhuǎn)下載的現(xiàn)象,解決思路:客戶端同事推薦用pdf.js,然后在網(wǎng)上查找發(fā)現(xiàn),vue有一個插件vue-pdf,是基于pdf.js封住的,因此決定采用插件vue-pdf實現(xiàn)

二、vue-pdf插件實現(xiàn)預(yù)覽

1、實現(xiàn)過程

下包

npm i vue-pdf

引入并使用

<template>
  <div class="pdf-container">
    <pdf v-for="item in numPages" :key="item" :src="pdfSrc" :page="item" ref="pdf"></pdf>
  </div>
</template>
<script>
import pdf from 'vue-pdf'
export default {
  data () {
    return {
      pdfSrc: '',
      numPages: null
    }
  },
  components: {
    pdf
  },
  computed: {},
  created () {
      var extension = this.$route.query.pdfSrc.split('.').pop().toLowerCase()
    if (extension == 'pdf') {
      this.pdfSrc = `${this.$route.query.pdfSrc}#toolbar=0`
    } else {
      this.pdfSrc = 'https://view.officeapps.live.com/op/embed.aspx?src=' + this.$route.query.pdfSrc
    }
    }
  },
  mounted () {
    this.getNumPages()
  },
  methods: {
    getNumPages () {
      const loadingTask = pdf.createLoadingTask(this.pdfSrc)
      loadingTask.promise.then(pdf => {
        this.numPages = pdf.numPages
        console.log(' this.numPages', this.numPages)
      }).catch(err => {
        debugger
        console.error('pdf 加載失敗', err)
      })
    }
  }
}
</script>

 部署到測試線app中測試還是存在空白頁問題,于是換成插件pdfH5

三、pdfH5實現(xiàn)預(yù)覽

下包

npm i pdfh5

代碼實現(xiàn)

<template>
  <div class="pdf-container">
    <div id="pdf-content"></div>
    <iframe v-if="docType!='pdf'" :src="pdfUrl" marginWidth="0" marginHeight="0" scrolling="no" frameBorder="0" style="width: calc(100% + 17px); height: calc(100% + 17px)"></iframe>
  </div>
</template>
<script>
import Pdfh5 from 'pdfh5'
import 'pdfh5/css/pdfh5.css'
export default {
  name: 'Pdfh5',
  data () {
    return {
      docType: '',
      pdfh5: null,
      // 可引入網(wǎng)絡(luò)文件或者本地文件
      pdfUrl: 'http://storage.xuetangx.com/public_assets/xuetangx/PDF/PlayerAPI_v1.0.6.pdf' // 如果引入本地pdf文件,需要將pdf放在public文件夾下,引用時使用絕對路徑(/:表示public文件夾)
    }
  },
  mounted () {
    this.docType = this.$route.query.pdfSrc.split('.').pop().toLowerCase()
    if (this.docType == 'pdf') {
      this.initPdf()
    } else {
      this.pdfUrl = 'https://view.officeapps.live.com/op/embed.aspx?src=' + this.$route.query.pdfSrc
    }
  },
  methods: {
    initPdf () {
      // pdfh5實例化時傳兩個參數(shù):selector選擇器,options配置項參數(shù),會返回一個pdfh5實例對象,可以用來操作pdf,監(jiān)聽相關(guān)事件
      // pdfh5 = new Pdfh5(selector, options) goto初始到第幾頁,logo設(shè)置每一頁pdf上的水印
      this.pdfh5 = new Pdfh5('#pdf-content', {
        pdfurl: this.$route.query.pdfSrc,
        goto: 1
        // 設(shè)置每一頁pdf上的水印
        // logo: { src: require('@/assets/images/bus/icon_head@2x.png'), x: 420, y: 700, width: 120, height: 120 }
      })
      this.pdfh5.scrollEnable(true) // 允許pdf滾動
      // 監(jiān)聽pdf準(zhǔn)備開始渲染,此時可以拿到pdf總頁數(shù)
      this.pdfh5.on('ready', function () {
        console.log('總頁數(shù):' + this.totalNum)
      })
      // 監(jiān)聽pdf加載完成事件,加載失敗、渲染成功都會觸發(fā)
      this.pdfh5.on('complete', (status, msg, time) => {
        console.log('狀態(tài):' + status + ',信息:' + msg + ',耗時:' + time + '毫秒')
      })
    }
  }
}
</script>
<style  scoped>
.pdfjs {
  height: 100vh !important;
}
.pdf-container {
  width: 100%;
  height: 100%;
}
</style>

最終測試,該方案可以。

總結(jié)

到此這篇關(guān)于前端實現(xiàn)pdf預(yù)覽功能的文章就介紹到這了,更多相關(guān)前端實現(xiàn)pdf預(yù)覽內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue使用ArcGis?API?for?js創(chuàng)建地圖實現(xiàn)示例

    vue使用ArcGis?API?for?js創(chuàng)建地圖實現(xiàn)示例

    這篇文章主要為大家介紹了vue使用ArcGis?API?for?js創(chuàng)建地圖實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • vuex的使用及持久化state的方式詳解

    vuex的使用及持久化state的方式詳解

    這篇文章主要介紹了vuex的使用及持久化state的方式詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • vue生命周期與鉤子函數(shù)簡單示例

    vue生命周期與鉤子函數(shù)簡單示例

    這篇文章主要介紹了vue生命周期與鉤子函數(shù),結(jié)合簡單實例形式分析了vue.js生命周期及鉤子函數(shù)相關(guān)流程與實現(xiàn)技巧,需要的朋友可以參考下
    2019-03-03
  • Vue開發(fā)實踐指南之應(yīng)用入口

    Vue開發(fā)實踐指南之應(yīng)用入口

    這篇文章主要給大家介紹了關(guān)于Vue開發(fā)實踐指南之應(yīng)用入口的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-01-01
  • vue3在自定義hooks中使用useRouter報錯的解決方案

    vue3在自定義hooks中使用useRouter報錯的解決方案

    這篇文章主要介紹了vue3在自定義hooks中使用useRouter報錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • vue代理模式解決跨域詳解

    vue代理模式解決跨域詳解

    這篇文章主要介紹了vue代理模式解決跨域詳解的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • Vue的編碼技巧與規(guī)范使用詳解

    Vue的編碼技巧與規(guī)范使用詳解

    這篇文章主要介紹了Vue的編碼技巧與規(guī)范使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • vue頁面右下角添加懸浮按鈕組件的方法代碼

    vue頁面右下角添加懸浮按鈕組件的方法代碼

    這篇文章主要介紹了vue頁面右下角添加懸浮按鈕組件的方法代碼,在Vue項目中,通過在頂層路由文件中添加代碼,可以實現(xiàn)頁面左下角懸浮按鈕的功能,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-11-11
  • Vue數(shù)據(jù)驅(qū)動試圖的實現(xiàn)方法及原理

    Vue數(shù)據(jù)驅(qū)動試圖的實現(xiàn)方法及原理

    當(dāng)Vue實例中的數(shù)據(jù)(data)發(fā)生變化時,與之相關(guān)聯(lián)的視圖(template)會自動更新,反映出最新的數(shù)據(jù)狀態(tài), Vue的數(shù)據(jù)驅(qū)動視圖是通過其響應(yīng)式系統(tǒng)實現(xiàn)的,以下是Vue數(shù)據(jù)驅(qū)動視圖實現(xiàn)的核心原理,需要的朋友可以參考下
    2024-10-10
  • vue如何實現(xiàn)二進(jìn)制流文件導(dǎo)出excel

    vue如何實現(xiàn)二進(jìn)制流文件導(dǎo)出excel

    這篇文章主要介紹了vue如何實現(xiàn)二進(jìn)制流文件導(dǎo)出excel,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06

最新評論