方案一:ScriptX打印組件
方案二:WsReport打印組件
我們首先來說一下方案一:
聽說這個(gè)組件已經(jīng)是2006年的事情了,那時(shí)候自己為了開發(fā)一個(gè)事業(yè)單位的辦證系統(tǒng)用到了定制格式打印功能,為了解決此問題,因此在破解了wsreport組件,并且在CSDN中對(duì)外公布了出來,沒想到這一公布頗具波瀾,很多朋友紛紛向我索要此組件,其中有一位朋友提到了這個(gè)scriptx,說其功能如何強(qiáng)大,可惜是美國人開發(fā)的,讀不懂英文,所以沒有辦法使用。因此讓我來研究一下,但是一直以來我的時(shí)間一向比較緊迫,所以直到今天用到此組件的時(shí)候才不得已啃了這塊硬骨頭,當(dāng)你進(jìn)入scriptx的官方網(wǎng)站的時(shí)候,看了他的使用說明會(huì)讓你一頭霧水,莫不這頭腦,并且如果按照他提供的實(shí)例程序來運(yùn)行測(cè)試程序,也是根本就不能通過的,看了半天讓我暈暈乎乎的摸不著北。
最后不得已,只有放棄官方的使用說明,然后結(jié)合自己的經(jīng)驗(yàn)進(jìn)行測(cè)試,當(dāng)然結(jié)果是可想而知的,最終是成功了。我所采用的方法是僅僅使用官方提供的最新版本的.cab文件,cab文件是一個(gè)封包文件,該文件往往包含多個(gè)文件在其內(nèi),即通常所說的客戶端activex,當(dāng)用戶第一次瀏覽網(wǎng)站的時(shí)候,該cab文件會(huì)自動(dòng)下載并安裝到客戶端的電腦上,務(wù)須在服務(wù)器端注冊(cè),因此使用非常簡單。閑話少敘,言歸正傳,讓我們首先去官方下載cab文件,然后看如下代碼就明白了。
<!--這里調(diào)用控件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>
//用于設(shè)置打印參數(shù)
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 //下頁邊距
}
//用于調(diào)用設(shè)置打印參數(shù)的方法和顯示預(yù)覽界面
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="關(guān)閉">
</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中的信息對(duì)應(yīng),否則組件會(huì)加載錯(cuò)誤,這兩項(xiàng)其實(shí)不難找,只要你用winrar打開你下載的cab文件,然后找到擴(kuò)展名是.inf的文件,然后打開之,就能看到了。
使用范圍:該組件針對(duì)打印大篇幅的文檔非常好,對(duì)于那些對(duì)打印定位要求不是非常嚴(yán)格的東西。但是如果用它來打印增值稅專用發(fā)票或者打印支票就不可以了。因?yàn)樵鲋刀悓S冒l(fā)票類的東西對(duì)定位的要求非常的嚴(yán)格,那么這些東西我們用什么組件來打印呢?方法在下邊,讓我們看一下方案二就知道了。
我們?cè)賮砜匆幌路桨付?br />
wsreport這個(gè)組件可以用來打印對(duì)定位要求非常嚴(yán)格的內(nèi)容,例如增值稅專用發(fā)票,既然定位準(zhǔn)確,那么控制的時(shí)候肯定就有難度,不過沒關(guān)系,這個(gè)組件附帶詳細(xì)的使用說明,并且保證你能夠看懂,呵呵,因?yàn)槭菄碎_發(fā)的。不過這個(gè)組件是需要注冊(cè)的,,非注冊(cè)版本不能打印連續(xù)的分頁,另外打印出來的文檔永遠(yuǎn)都有“試用”二字,如果你想突破這些限制,那就自己破解吧,不要向我索要。