jQuery打印Html頁面自動分頁

 最近項目中需要用到打印HTML頁面,需要指定區域打印,使用jquery.PrintArea.js 插件 

用法: 

  1. $("div#printmain").printArea();  



但還是會打印DIV後面的內容,這裏可以使用CSS控制打印分頁 

  1. <div style="page-break-after: always;"></div>  



有時用CSS控制分頁了但還是會連續打印頁面,這裏就可以用上PrintArea 插件中的屬性參數。 


PrintArea部分源碼: 

  1. var modes = { iframe : "iframe", popup : "popup" };  
  2. var defaults = { mode     : modes.iframe,  
  3.                     popHt    : 800,  
  4.                     popWd    : 800,  
  5.                     popX     : 200,  
  6.                     popY     : 200,  
  7.                     popTitle : '',  
  8.                     popClose : false ,  
  9.                     twoDiv   : '', //自已擴展的屬性,爲滿足變態需求  
  10.                     pageTitle: ''};//自已擴展的屬性,爲滿足變態需求  



可以看出插件中定義的屬性格式爲JSON,下面介紹部分屬性 

modes定義了兩個屬性,指定popup時會打開新窗口,可以視爲打印預覽頁面,默認爲iframe。 

@popClose | [boolean] | (false),true  打印完成後是否開閉預覽頁面,默認爲false(不關閉)。 

  1. $("div#printmain").printArea({mode:"popup",popClose:true});  


這樣就可以指定DIV打印了。 

下面說一下我新增兩個屬性的用途 
twoDiv: 
        需要打印的第二個DIV ,當然會是第二頁,這個頁面比較長,需要自動分頁,並且表格中每行都不一樣,有些行跨了多行,這裏打印出來,一行可能會打印在兩張紙上。 

pageTitle: 
        第二個DIV分成多頁裏,每一頁的表頭都需要一樣,這個參數就是公用表頭。 

這兩個參數都對應着頁面中的DIV,如:

  1. <div id="pageTitle" style="display: none;">  


頁面定義好後,我們看看插件中是如何處理我們的頁面的。

  1. writeDoc.open();  
  2. writeDoc.write(html); //打找一個窗口關寫窗口中的HTML代碼   
  3. writeDoc.close();  
  4.   
  5. printWindow.focus();  
  6. printWindow.print();  



下面是生成html的代碼

  1. html+=docType() + "<html>" + getHead() + getBody(thisPage) + "</html>";  


插件中都定義了相義的方法,我沒有做任何修改,這裏我就不粘貼了。 


下面是我的思路: 
       需在將一個DIV中的內容分成多頁,且一行不跨多頁,我們就得在生成html 代碼上下功夫了。 

       首先找出DIV中的所有行,當公共表頭加上這些行後高度達到一頁,就需要分頁了,這裏就有可以一頁中最後一行剛好跨了多頁,將這一行保存下來,放到下一頁。 

       每一頁生成完成後都需要在HTML標籤後面加上CSS分頁標記,這樣就打印機就會乖乖的分頁。 
      
       說明一下,生成的預覽頁面一頁就是一個HTML頁面,它有對應的表頭與DTD信息。 

       有人可能明明預覽只有4頁,而打印出來總會多一頁,這時你需要檢驗一下你生成的頁面中分頁標記是不是在HTML標籤之前。 
       分面標記一定要在HTML標籤之後,這樣可解決打印多打一頁問題。 

PS:   
       下面我會傳上我修改過後的JS插件,由於我項目週期的原因,代碼中很多部分都是寫死了,只是爲了解決本次打印的問題。所在代碼中寫得很亂,希望大家將究着看 

發佈了8 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章