国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

微信小程序?qū)崿F(xiàn)PDF預(yù)覽功能——pdf.js(含源碼解析)

這篇具有很好參考價(jià)值的文章主要介紹了微信小程序?qū)崿F(xiàn)PDF預(yù)覽功能——pdf.js(含源碼解析)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。


前言

前一段時(shí)間遇到了一個(gè)需求,關(guān)于 pdf 文件的預(yù)覽,客戶要求如下:

  • 只能在微信小程序內(nèi)預(yù)覽,不能調(diào)起本地瀏覽器預(yù)覽;
  • 需要讓用戶強(qiáng)制閱讀 10s 后才算閱讀完成,進(jìn)而進(jìn)行下一步操作;
  • 用戶不能下載預(yù)覽的 pdf 文件;

因?yàn)橐恍┰颍ù颂幨÷砸蝗f(wàn)字??),這個(gè)項(xiàng)目具有 H5 端和原生微信小程序端,并且他們有著相同的業(yè)務(wù)邏輯??,所以最好的辦法就是設(shè)計(jì)出一套方案適用兩端,前期做了一些嘗試,可以看這篇文章,最后決定使用 pdf.js 來(lái)實(shí)現(xiàn)業(yè)務(wù)要求。


一、pdf.js 是什么?

PDF.js 由 Mozilla 提供支持。目標(biāo)是創(chuàng)建一個(gè)通用的、基于 Web 標(biāo)準(zhǔn)的平臺(tái),用于解析和呈現(xiàn) PDF。

二、使用步驟

1.下載庫(kù)文件

前往 pdf.js 的 官網(wǎng) 下載庫(kù)文件,我們下載哪個(gè)版本都是可以的,后者適用于舊版瀏覽器,我這里下載的后者。

微信小程序?qū)崿F(xiàn)PDF預(yù)覽功能——pdf.js(含源碼解析)

下載完成后,因?yàn)槲⑿判〕绦虼虬南拗?/strong>,我將庫(kù)文件放到騰訊云服務(wù)器上,如果想測(cè)試可以聯(lián)系我提供測(cè)試資源。
H5 可以放到本地,目錄如下:

微信小程序?qū)崿F(xiàn)PDF預(yù)覽功能——pdf.js(含源碼解析)

2.使用方式

通過web目錄下 viewer.html 查看器 + pdf文件路徑預(yù)覽pdf文件

yourPath/web/viewer.html?file=pdfPath 
微信小程序端——使用 web-view 標(biāo)簽

代碼示例:

//.wxml
<web-view src="{{pdfView+pdfUrl}}" ></web-view>

//.js
data: {
		// viewer.html 查看器的路徑
        pdfView:"yourPath/web/viewer.html?file=",
        // 要預(yù)覽的 pdf 文件的路徑
        pdfUrl:"http://play.li-stack.top:88/pdf/sjisr-3-2-36-42.pdf"
    },

運(yùn)行效果:
微信小程序?qū)崿F(xiàn)PDF預(yù)覽功能——pdf.js(含源碼解析)

H5 端——使用 iframe 標(biāo)簽(使用vue框架)

代碼示例:

<template>
    <div>
        <iframe :src="src" style="width: 100%;height: 100vh" ></iframe>
    </div>

</template>

<script>
    export default {
        name: "myTestTwo",
        data(){
            return {
                url:'http://play.li-stack.top:88/pdf/sjisr-3-2-36-42.pdf',
                src:''
            }
        },
        mounted() {
            this.getUrl();
        },
        methods :{
            getUrl:function () {
                this.src = '/pdfplugin/web/viewer.html?file=' + this.url
            }
        }
    }
</script>

<style scoped>

</style>

運(yùn)行效果:
微信小程序?qū)崿F(xiàn)PDF預(yù)覽功能——pdf.js(含源碼解析)

注意事項(xiàng):

  • web-view 標(biāo)簽?zāi)J(rèn)鋪滿全屏,會(huì)覆蓋其他組件;
  • H5項(xiàng)目使用 pdf.js 注意跨域問題;
3.更改源碼
如何隱藏頂部工具欄

在業(yè)務(wù)要求中,不能讓用戶下載 pdf ,我這里處理的辦法就是將頂部工具欄隱藏
處理方法:

  • 在 web 文件夾下的 viewer.html 文件,搜到 <div class="toolbar">
  • 將其改為 <div class="toolbar" style="display:none">這樣就可以隱藏了。
如何讓用戶強(qiáng)制閱讀一定時(shí)間

在讓用戶強(qiáng)制閱讀時(shí),一定是 pdf 文件先加載完成,才開始倒計(jì)時(shí)。
處理方法:

  • 在 viewer.js 中找到 load 函數(shù)(可直接搜索load: function load(pdfDocument定位)) ,部分代碼如下
load: function load(pdfDocument) {
    var _this11 = this;

    this.pdfDocument = pdfDocument;
    pdfDocument.getDownloadInfo().then(function (_ref4) {
      var length = _ref4.length;
      _this11._contentLength = length;
      _this11.downloadComplete = true;

      _this11.loadingBar.hide();

      firstPagePromise.then(function () {
        _this11.eventBus.dispatch("documentloaded", {
          source: _this11
        });
      });
    });
	
	//添加以下代碼
	let mytime = 10
    let timeout = setInterval(()=>{
        console.log("倒計(jì)時(shí):",mytime)
        if(mytime == 0){
            clearTimeout(timeout)
        }else{
            --mytime
        }
    },1000)

    ……
  }
  • 當(dāng)pdf加載成功后運(yùn)行效果,頁(yè)面渲染效果大家可以自行實(shí)現(xiàn)
    微信小程序?qū)崿F(xiàn)PDF預(yù)覽功能——pdf.js(含源碼解析)
如何獲取pdf總頁(yè)數(shù)

同樣在上述 load 函數(shù)中,當(dāng)pdf加載完成后,pdfDocument 屬性中就包含了當(dāng)前 pdf 的總頁(yè)數(shù)
處理方法:可通過 pdfDocument.numPages 獲取

如何獲取pdf當(dāng)前頁(yè)數(shù)

如果能獲取當(dāng)前頁(yè)數(shù),也獲取了總頁(yè)數(shù),這就可以實(shí)現(xiàn)閱讀進(jìn)度了,當(dāng)然閱讀進(jìn)度的細(xì)節(jié)還有很多,比如用戶很快地往下滑,這種肯定不能算是真正閱讀了,在這里我就不細(xì)分了,下面來(lái)獲取一下當(dāng)前頁(yè)數(shù)
處理方法:

  • 可以在本地儲(chǔ)存中獲取,鍵名:pdfjs.history;
  • 找到函數(shù) function webViewerPageChanging(_ref15) ,當(dāng)每次滑動(dòng)屏幕時(shí),每經(jīng)過一個(gè)頁(yè)面就會(huì)得到當(dāng)前頁(yè)數(shù),代碼如下:
function webViewerPageChanging(_ref15) {
  var pageNumber = _ref15.pageNumber,
      pageLabel = _ref15.pageLabel;
  //這里打印出來(lái)
  console.log(pageNumber)
  PDFViewerApplication.toolbar.setPageNumber(pageNumber, pageLabel);
  PDFViewerApplication.secondaryToolbar.setPageNumber(pageNumber);

  if (PDFViewerApplication.pdfSidebar.isThumbnailViewVisible) {
    PDFViewerApplication.pdfThumbnailViewer.scrollThumbnailIntoView(pageNumber);
  }
}
將總頁(yè)數(shù)和當(dāng)前頁(yè)數(shù)發(fā)送給小程序

有時(shí)候會(huì)需要H5和小程序通訊,可以參考 這篇文章


總結(jié)

本文主要是針對(duì)微信小程序的 web-view 標(biāo)簽,在H5中使用 ifream 獲取頁(yè)數(shù)會(huì)有更簡(jiǎn)單的的方法,
例如可以嘗試:

var iFrame = document.getElementById('iframe_id');
if( iFrame.contentDocument){
	let currentPageNum = iFrame.contentDocument.getElementById('pageNumber').value;
}
//或者
document.querySelector('iframe id').contentWindow.PDFViewerApplication.page;

//或者
window.PDFViewerApplication.pdfViewer.currentPageNumber

歡迎大家積極交流……文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-405680.html

到了這里,關(guān)于微信小程序?qū)崿F(xiàn)PDF預(yù)覽功能——pdf.js(含源碼解析)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包