1. 程式人生 > >pdf.js如何預設顯示指定頁碼

pdf.js如何預設顯示指定頁碼

前兩天由於工作需要,用到了pdf.js,裡面有功能是需要顯示出來pdf的指定頁數,百度了很長時間,

發現百度上關於此類的問題的回答很少,可能都不會用到這個需求吧...

於是只能硬生生的去看看pdf.js裡面的viewer.js原始碼,希望從中找到解決辦法,但是接近8000行的程式碼,看的眼睛都花了...

於是想了一個捷徑的方法,不是特別完美的解決了這個問題...

接下來,正式介紹:

1.首先說一下定義檔案路徑問題。

   我的pdf.js是作為子視窗巢狀進來的的,即使用了<iframe>標籤。

   所以,我在從後臺查詢出路徑和頁碼後定義路徑(pdfURL)和頁碼(pageArr)的時候都是定義的JS全域性變數。

 viewer.js檔案中獲取到父視窗的url(在檔案最上面定義為全域性的):

var DEFAULT_URL=window.parent.pdfURL;
這樣就可以顯示出PDF檔案了

注意:如果移動了viewer.html和viewer.js檔案位置的話,要更改js檔案中的預設路徑,找到下圖的這個函式,並修改其相應的路徑


2.現在檔案可以顯示了,就要解決如何顯示到指定頁面了。

 因為我的資料庫中存放的頁碼形如“2,3,4”這樣的形式,所以在獲取到頁數後,使用split函式,進行分隔

這裡的pageArr變數是全域性變數。

viewer.js檔案中獲取到父視窗的頁數pageArr(在檔案最上面定義為全域性的):

var fpage=window.parent.pageArr;

3.已經得到存放頁碼的陣列(只有一頁時,也可以用該方法)後,找到下圖這個函式


上圖中的第1893行是我自己加入的,這個函式就是初始化頁面的函式,

這句話就是為當前頁面指定頁碼,所以我指定的預設顯示頁的是我所需的頁碼陣列中的第一位。

這樣在初始化的時候,就會預設跳轉到我們指定的頁面了。

如果不需要將其他頁面隱藏的話,就不必看第4步了。

4.顯示指定的頁碼,先找到下面這個函式。


這個函式的最下面是這樣的:


這裡是將每頁的PDF的內容新增到頁面中,並且的viewer.js有迴圈呼叫。

所以在這裡做點文章就可以了。

如下圖:

上圖中4770行中的if語句是我自己加的,

意思就是判斷這個this.id在不在這個頁碼(fpage)中,如果不在的話,就會返回-1;

這個時候給它加一個屬性,visibility="hidden";

else語句裡面的同理。

這裡不能用for迴圈為這個id加樣式,為什麼呢,試試就知道了,這裡是雙重迴圈的...

5.最後這樣的話,頁面就會只顯示我們所指定的頁碼了,但是不足的一點就是,

visibility這個屬性是佔空間的,即使其他的不會顯示,但也會有一片黑色的區域....

嘗試過用,display="none"; 這樣顯示的效果就完美了

但是這樣的話,下面這個函式就會報錯,由於我的JS能力和時間有限,就沒有仔細研究。

有大神會的話,也可以指點下我。


這個函式好像主要就是定頁面的那個偏移量的,定位到那一頁,偏移量就是多少,

要是display=none的話,這樣元素的高度就不存在,定位偏移量就會報錯。

所以最後使用了visibility這個屬性。