IE 程式控制印表(不用按確定)
來源:MSDN cww實作
window.print()
一定會出現一個列印的對話方塊,而且沒有辦法省略,這是必然的結果,因為Browser
的環境原本就不允許Browser上的Script/Object等來存取Client
機器的資源,否則,隨便一個Web程式
就可以存取Client的Resource,那就太可怕了。但實際的應用上,有時就是要允許Web的程式來存取
Client的資源(如:File/Printer/Registry ....),這時我們的做法是在IE的安全設定上允許DownLoad/執行
某個站所發佈的ActiveX Control/Applet 等。
使用者按收費之後要自動印出收據,而Browser的做法是按收費的按鈕後,出現收據的Preview,還得
再按一下印表才能列出,或者使用另一篇文章的做法,不出現收據的Preview網頁,而直接出現列印
的對話方塊以要求由哪一台Printer印出等資訊。不管如何,使用者都要按兩次才能印出報表。試想
intranet的環境中,使用者會願意如此做嗎?
所以有另一個沒有辦法的辦法,那就是寫程式攔截 列印
的對話方塊,而後模擬選了哪一台印表機
與列印的範圍等資訊後,再自動按確定。但是這種做法不保證對新版的IE都有效。目前在Win9X上
的IE5.5 IE6都可以Work,但不適用於win2000,那需要另外再改程式。
要使用這ActiveX control項,需先取得WebPrint.CAB,並放到網站上,而Client端需設定允許
由該網站上DownLoad/執行 ActiveX Control項。請在 工具/Internet選項/安全性/自訂層級
中設定。
目前可設定的屬性有以下:
屬性名稱 |
說明 |
ie5.5 可用否 |
ie6 可用否 |
pntPrinterPort |
設定列由哪一印表機Port印出(如:LPT1:) |
可 |
可 |
pntPrinterName |
設定列由哪一印表機Device印出(如:Stylus) |
可 |
可 |
pntPageOption |
1:列印全部頁 2:印 From 第n頁 to 第 m頁 |
可 |
可 |
pntPageFrom |
上述2:之n |
可 |
可 |
pntPageTo |
上述2:之m |
可 |
可 |
pntPageHeader |
每一頁的Header |
可 |
可 |
pntPageFooter |
每一頁的Footer |
可 |
可 |
pntLeftMargin |
每一頁左邊界(mm) |
可 |
可 |
pntRightMargin |
每一頁右邊界(mm) |
可 |
可 |
pntTopMargin |
每一頁上邊界(mm) |
可 |
可 |
pntBottomMargin |
每一頁下邊界(mm) |
可 |
可 |
pntOrientation |
設定紙張1:直印 2:橫印 |
可 |
不可 |
pntPaperSize |
設定紙張大小 |
可 |
不可 |
pntPaperSource |
設定紙張來源 |
可 |
不可 |
pntAutoPrint |
True:自動按確定 False:不自動按確定 |
可 |
可 |
方法:
1.GetPrinterList() 取得該Client所有印表機名稱,每個印表機名稱中間用 ; 隔開
2.EnableCBTHook() :IE6要用之,且在window.print()前設定
3.BeforePrint() : IE5.5用之且在window.print()前設定
4.AfterPrint() :ie5.5用之,且在window.print()後設定
使用範例:- <HTML>
- <HEAD>
-
- <SCRIPT LANGUAGE="VBScript">
- Sub doPrint()
- 'msgbox "Ready to Print"
-
- wbp.pntOrientation = 1
- wbp.pntTopMargin = 20.5
- wbp.pntPageOption = 2
- wbp.pntPageFrom = 1
- wbp.pntPageTo = 1
- wbp.pntPrinterName = window.cboPrinter.value
-
- wbp.pntAutoPrint = True
- if instr(1,window.navigator.appVersion,"MSIE 6.") > 0 then
- wbp.EnableCBTHook
- window.print()
- else
- wbp.BeforePrint
- window.print()
- wbp.AfterPrint
- end if
-
-
- End Sub
- </SCRIPT>
- <SCRIPT ID=clientEventHandlersVBS LANGUAGE=vbscript>
- <!--
-
- Sub window_onload
- dim opt, strPntList, aryPrinter, i, strPrinter
- strPntList = wbp.GetPrinterList()
- if len(strPntList) = 0 then exit sub
- aryPrinter = split(strPntList,";")
- for i = lbound(aryPrinter) to ubound(aryPrinter)
- strPrinter = aryPrinter(i)
- set opt= document.createElement("OPTION")
- opt.text = strPrinter
- opt.value = strPrinter
- window.cboPrinter.options.add(opt)
- next
- End Sub
- -->
- </SCRIPT>
- </HEAD>
- <BODY>
-
- <object classid="clsid:67885808-366A-4DE0-B18D-EECD9EE2A27B" id="wbp" width="0" height="0" CODEBASE="include/WebPrint.CAB#version=1,0,0,0">>
- </object>
- <INPUT TYPE="BUTTON" VALUE="Print" ONCLICK="doPrint()">
- This is a Test <script LANGUAGE=vbscript>document.write(window.navigator.appVersion)</script>
- <select name="cboPrinter">
- </select>
-
- </BODY>
- </HTML>
複製代碼 |