2017-02-13 43 views
1

我試圖使用嵌入標籤顯示PDF。 PDF是從.NET中的HTTPHandler加載的。如何找出何時通過嵌入標籤加載PDF

PDF的顯示工作正常,但我想知道文件何時完成加載和顯示,以便我可以運行JavaScript函數。

我已經嘗試綁定onloadeddata,onload,onloadstart,onended和onplay的事件處理程序,但他們都沒有受到打擊。

是我想做的可能嗎?如果是這樣,我可以捕捉到什麼事件?

<embed [email protected] id="pdfiFrame" type="application/pdf" alt="pdf" style="width: 100%; height: 99.4%;" frameborder="0" pluginspage="http://www.adobe.com/products/acrobat/readstep2.html" onloadeddata='tryThis;' onload="tryThis;" onloadstart="tryThis;", onended="tryThis;" onplay="tryThis;"/> 

function tryThis(arg) { 
    alert("here = " + arg); 
} 

路徑在MVC Razor視圖中的變量中定義。

從處理程序本身執行任何操作都不是一個選項,因爲我也在緩存結果,所以處理程序不會再次被打到同一個文件。

回答

0

整個PDF文件可能永遠不會加載完全...特別是如果PDF閱讀器是Adobe Reader,但對任何能夠利用「快速瀏覽」的PDF查看器也是如此。 PDF文件是隨機訪問的,符合標準的瀏覽器只會向服務器請求顯示請求頁面所需的字節。這就是爲什麼您可以在瀏覽器中打開PDF的原因,例如,立即跳至1000頁文檔的第500頁,而無需等待整個下載。網頁優化PDF是專門爲設計的,而不是做你想做的事情。這就是說,你可以嘗試不在HTML中設置embed元素的src屬性,並使用AJAX(或其他)來獲取PDF作爲blob,然後在「done」事件觸發時設置src屬性。然後你就會知道你在之前已經有了整個文件它甚至開始顯示。

+0

您提出了一個有趣的觀點,即不一定加載整個事物。我真正想要做的是在頁面上放置一個模態進度指示器,直到文檔準備好查看。這並不意味着整個事情就在那裏,只是第一頁是可見的。有關如何做這部分的任何想法? – ChrisC

+0

Adob​​e Reader會這樣做,但它幾乎是猜測,除非它是網絡優化的,並且這些天成爲默認PDF查看器的可能性相當低。您將遇到的問題是,典型的PDF查看器不知道文件中的哪些字節是任何給定頁面所需的。這些對象是隨機訪問的,一個頁面對象可能涉及任何數量的其他對象,這些對象可能是共享的或對該頁面是唯一的。查看器只發現一個對象在讀取它時引用了另一組對象。 – joelgeraci