方案一:ScriptX打印組件
方案二:WsReport打印組件
我們首先來說一下方案一:
聽說這個組件已經是2006年的事情了,那時候自己為了開發一個事業單位的辦證系統用到了定制格式打印功能,為了解決此問題,因此在破解了wsreport組件,并且在CSDN中對外公布了出來,沒想到這一公布頗具波瀾,很多朋友紛紛向我索要此組件,其中有一位朋友提到了這個scriptx,說其功能如何強大,可惜是美國人開發的,讀不懂英文,所以沒有辦法使用。因此讓我來研究一下,但是一直以來我的時間一向比較緊迫,所以直到今天用到此組件的時候才不得已啃了這塊硬骨頭,當你進入scriptx的官方網站的時候,看了他的使用說明會讓你一頭霧水,莫不這頭腦,并且如果按照他提供的實例程序來運行測試程序,也是根本就不能通過的,看了半天讓我暈暈乎乎的摸不著北。
最后不得已,只有放棄官方的使用說明,然后結合自己的經驗進行測試,當然結果是可想而知的,最終是成功了。我所采用的方法是僅僅使用官方提供的最新版本的.cab文件,cab文件是一個封包文件,該文件往往包含多個文件在其內,即通常所說的客戶端activex,當用戶第一次瀏覽網站的時候,該cab文件會自動下載并安裝到客戶端的電腦上,務須在服務器端注冊,因此使用非常簡單。閑話少敘,言歸正傳,讓我們首先去官方下載cab文件,然后看如下代碼就明白了。
<!--這里調用控件ScriptX.cab-->
<object id="factory" style="DISPLAY: none" viewastext classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814" codebase="http://www.a.com/smsx.cab#Version=6,3,434,26"></object>
<SCRIPT defer>
//用于設置打印參數
function printBase() {
factory.printing.footer = "頁眉" //頁眉
factory.printing.footer = "頁腳" //頁腳
factory.printing.portrait = false //true為縱向打印,false為橫向打印
factory.printing.leftMargin = 1.5 //左頁邊距
factory.printing.topMargin = 0.5 //上頁邊距
factory.printing.rightMargin = 0.5 //右頁邊距
factory.printing.bottomMargin = 1.0 //下頁邊距
}
//用于調用設置打印參數的方法和顯示預覽界面
function printReport(){
printBase();
//window.print();
factory.printing.Preview();
}
//使界面最大化
maxWin();
function maxWin()
{
var aw = screen.availWidth;
var ah = screen.availHeight;
window.moveTo(0, 0);
window.resizeTo(aw, ah);
}
</SCRIPT>
<table width="100%" border="0" cellspacing="0" cellpadding="0" align="center" bordercolor="#FFFFFF">
<tr bordercolor="#FFFFFF">
<td >
<table width="70%" border="0" cellspacing="0" cellpadding="2" align="center">
<tr>
<td align="center"><font size="5" face="宋體"><b>查詢打印</b></font></td>
</tr>
<tr>
<td align="center">
<div id="divReport" name="divReport">
<input type="button" name="cmdPRINT" id="cmdPRINT" onclick="printReport()" value="打印">
<input type="button" onclick="window.close();" value="關閉">
</div>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
在上邊的代碼中,大家需要注意以下<object id="factory" style="DISPLAY: none" viewastext classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814" codebase="http://www.a.com/smsx.cab#Version=6,3,434,26"></object>
這段代碼用來加載cab文件,clsid和codebase必須要和你下載的cab中的信息對應,否則組件會加載錯誤,這兩項其實不難找,只要你用winrar打開你下載的cab文件,然后找到擴展名是.inf的文件,然后打開之,就能看到了。
使用范圍:該組件針對打印大篇幅的文檔非常好,對于那些對打印定位要求不是非常嚴格的東西。但是如果用它來打印增值稅專用發票或者打印支票就不可以了。因為增值稅專用發票類的東西對定位的要求非常的嚴格,那么這些東西我們用什么組件來打印呢?方法在下邊,讓我們看一下方案二就知道了。
我們再來看一下方案二:
wsreport這個組件可以用來打印對定位要求非常嚴格的內容,例如增值稅專用發票,既然定位準確,那么控制的時候肯定就有難度,不過沒關系,這個組件附帶詳細的使用說明,并且保證你能夠看懂,呵呵,因為是國人開發的。不過這個組件是需要注冊的,,非注冊版本不能打印連續的分頁,另外打印出來的文檔永遠都有“試用”二字,如果你想突破這些限制,那就自己破解吧,不要向我索要。