1. 程式人生 > >利用JQuery在網頁上列印PDF

利用JQuery在網頁上列印PDF

專案需求是這樣的,在HTML網頁上點選列印,然後彈出chrome列印視窗,視窗中是後臺生成的PDF檔案。其中PDF檔案是由後臺servlet生成的。
第一種想法是,點選列印時,彈出一個新的視窗

window.open(url,"_blank");//url為生成PDF的url

在這個新的頁面中有PDF檔案的內容,而且網頁上也剛剛有列印的功能,這種看起來是最簡單的,但是對使用者而言,需要點選二次按鈕才能真正列印。所以,使用者體驗不會太好。
第二種想法是利用iframe,將PDF檔案的內容包含其中,這個時候呼叫window.print()來彈出列印視窗。

//建立一個空的iframe,因為如果每次請求都生成PDF,那麼是不必要的。
<iframe style="display:none" id="printIframe"></iframe> $(document).ready(function(){ .... $("#printIframe").load(function(){//等待iframe載入完成後再執行doPrint.每次iframe設定src之後都會重新執行這部分程式碼。 doPrint(); }); .... }); //點選列印按鈕,觸發事件】 function printPDF(){ var src = $("#printIframe"
).attr("src"); if(!src){//當src為空,即第一次載入時才賦值,如果是需要動態生成的話,那麼條件要稍稍變化一下 $("#printIframe").attr("src","./attachment/Images.pdf");//暫時靜態PDF檔案 }else doPrint(); } function doPrint(){ $("#printIframe")[0].contentWindow.print(); }

一般的用法是使用window.print()方法來列印,但是當呼叫window.print()方法時將會顯示的是網頁正文的內容,而不是iframe的過程,有的網友說把網頁的focus置為iframe即可,但是我調研了半天沒找到一個好方法。
於是我想window只是一個物件,那麼如果我能獲取到iframe的window物件不就可以了?於是用了contentWindow的方法,果然好使。

這種方法看起來會更清爽一些,然後使用者體驗也還行。