使用IE內建的列印控制項進行套打
Author:http://blog.csdn.net/fenglibing
2009年12月10日
轉載請保留
當前項目中使用報表設計工具為開源的IREPORT報表工具,它的好處在於是開源的且免費的,如果是一般的列印,完全可以滿足要求;但是如果要涉及到列印格式為多種多樣,並且要給使用者完全的方便,即列印的時候系統自動建立紙張類型並確定寬高,使用者只需要點列印就行,IREPORT在這方面就不行了;因為其自身沒有列印控制項,只是調用IE的列印控制項,而IE為了安全起見,是不允許通過用戶端建立紙張類型的(註:這是我通過郵件從四方列印PAZU項目組的回複中得知的),其它的專業列印控制項,如明宇報表是可以實現這樣的功能的。
要使用IREPORT進行套打,也需要做兩套模板,使用者看到的是全部顯示內容的一套,而真正列印的是另外一套只有列印內容的一套,現在項目中就是這樣使用的,我不知道IREPORT是否可以根據屬性設定來自動產生兩套列印模板,即可以在設定版面設定哪些元素是套打元素、哪些是非套打元素,然後自動產生兩個HTML頁面,就可以減少工作量了;不過正因為它是開源的,所以作者可能維護的時間相對較少一點。
現在回到套打上來,在IE中如何使用IE控制項進行套打呢?這個時候可以採用在不同的時候根據情況顯示不同的架構頁面來做到,看如下:
此時我們只需要將列印方法,設定為如下即可執行個體套打的功能了:
function printThis() { document.getElementById("frame1").style.display="none"; document.getElementById("frame2").style.display=""; document.getElementById("functionLayer").style.display="none"; document.frames("frame2").window.focus();
window.print(); document.getElementById("frame1").style.display=""; document.getElementById("frame2").style.display="none"; document.getElementById("functionLayer").style.display="";
} |
另外需要注意一點,就是如果IFRAME中被包含的頁面的編碼與當前包含的頁面的編碼不一致,如當前父頁面的charset為gb2312,但是被包含頁面的編碼為utf-8,此時通過父面查看子頁面是顯示亂碼的,這個時候可以通過高過iframe的lang屬性,將其設為utf-8,如下:
<iframe id="frame1" src="..." lang="UTF-8" width="100%" height="500" frameborder=no></iframe>
也可以通過設定其charset屬性,如下:
frames.frame1.document.charset="utf-8";
這樣就可以解決亂碼的問題了。
本文出自:馮立彬的部落格