看了一位仁兄關於web列印的總結後很有感觸,也把自己web列印的經曆曬出來和大家分享一下。
隨著bs系統的日趨流行,客戶習慣性的思維是希望在cs系統裡比較熟悉,靈活的功能出現在bs系統裡。我們在開發bs系統的時候從需求到設計到開發時刻考慮客戶的使用習慣和感受,列印部分也不例外。
1.使用IE內建的列印功能
如果客戶對系統的列印要求不高的時候客戶建議客戶使用IE內建的列印可以設定列印紙張,尺寸邊距等。
由於使用IE內建的列印功能時客戶需要手動設定列印紙張等參數,系統不能將列印頁面的IE菜單隱藏起來。很多的B/S系統也了方便控制商務程序和解決存取權限的問題會把IE的功能表列地址欄都隱藏起來,這個時候如果想使用IE的列印功能最好的解決辦法就是在原來系統的IE頁面的基礎上開啟一個可是手動設定列印參數的IE的列印模態框。
使用這種方式來列印報表單據只有手寫HTML代碼,當然有人有過這種經曆:把word文檔用IE開啟再另存新檔*.html檔案的時候相應的文檔已經有了HTML代碼,然後拿著這些代碼再去開發我們自己的東西不是容易很多了。是現在office的功能越來越強大,這也是一個辦法,尤其是在現在的office盛行的世界裡,客戶在上系統前基本上都會使用word,excel等來記錄文檔。但是我們的系統裡如果用來這樣的代碼,當時是省事了,但是會給後期的調整顯示格式帶來很大的麻煩,因為這樣產生的HTML文檔有很多的冗餘代碼,所以請在使用前做一個考慮。
優點:無需自己寫代碼,操作方便,免費
缺點:列印功能簡單,遇到複雜的列印難以應付(如表頭斜線,圖表等)。
2.使用crystal report
優點:功能強大同時支援C/S和B/S系統,能夠支援複雜的報表,圖表等。
缺點:部署和著作權都是問題。
3.SQL內建的Report Sevice
優點:由於是微軟自己的產品好處多多,首先是費用問題,如果買了SQL就無需再多花銀子就可以免費使用此軟體。使用模式和微軟的軟體相同,易學易用。.net framework有相應的類庫支援,能方便的和系統結合,也能很好的和其他微軟產品整合。在報表的許可權方面和windows的域使用者結合。列印功能相對來講算比較強大的。
缺點:報表必須匯出後才能列印。
4.IE內建列印組件WebBrowser
不需下載,限制IE6.2600以上
樣本
<OBJECT classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 id=WebBrowser width=0></OBJECT>
<input name=Button onClick=document.all.WebBrowser.ExecWB(1,1) type=button value=開啟>
<input name=Button onClick=document.all.WebBrowser.ExecWB(2,1) type=button value=關閉所有>
<input name=Button onClick=document.all.WebBrowser.ExecWB(4,1) type=button value=另存新檔>
<input name=Button onClick=document.all.WebBrowser.ExecWB(6,1) type=button value=列印>
<input name=Button onClick=document.all.WebBrowser.ExecWB(6,6) type=button value=直接列印>
<input name=Button onClick=document.all.WebBrowser.ExecWB(7,1) type=button value=預覽列印>
<input name=Button onClick=document.all.WebBrowser.ExecWB(8,1) type=button value=版面設定>
<input name=Button onClick=document.all.WebBrowser.ExecWB(10,1) type=button value=屬性>
<input name=Button onClick=document.all.WebBrowser.ExecWB(17,1) type=button value=全選>
<input name=Button onClick=document.all.WebBrowser.ExecWB(22,1) type=button value=重新整理>
<input name=Button onClick=document.all.WebBrowser.ExecWB(45,1) type=button value=關閉>
頁面控制功能:版面設定,比如頁面邊界、頁首、頁尾等幾乎沒有,需要用IE內建的,但是如果想設定還是有辦法的就是修改註冊表,請參看下面的內容
下面是 Microsoft Internet Explorer 訪問列印設定的方式:
對於頁面邊界,Microsoft Internet Explorer 首先嘗試從以下登錄機碼中擷取值:
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\PageSetup
如果沒有此項,Internet Explorer 將通過從以下登錄機碼中複製值來建立此項:
HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\PageSetup
如果沒有此項,將提供預設值。
對於頁首和頁尾,將從以下項中擷取值:
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\PageSetup
如果沒有此項,將提供預設值。
頁面邊界的預設值是 0.75,
對於 Internet Explorer 預設印表機,預設值將從以下項提供:
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\PageSetup\printer
開發人員可以相應地更改用於列印設定的上述登錄機碼。
請注意,這些值作用於整個系統,影響著目前使用者的 WebBrowser 控制項和 Internet Explorer 的所有執行個體。
.NET Framework 2.0 版中是新增的WebBrowser 類
新的WebBrowser 控制項,可以在 Windows 表單應用程式中承載網頁。可以使用 WebBrowser 控制項來在應用程式中提供基於 HTML 的整合化協助或 網頁瀏覽功能。另外,可以使用 WebBrowser 控制項將現有的 Web 應用程式
程式轉換為將 DHTML 程式碼與 Windows 表單的使用者介面功能無縫整合在一起的用戶端應用程式
5.ScriptX列印控制項
ScriptX.cab:需要下載,免費版本限制IE5.5以上
下載ScriptX.cab控制項,修改codebase的值,預設下面的設定也可以。
頁面載入控制項:
<object id="factory" style="display:none" classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814" codebase="../ScriptX.cab#Version=6,1,432,1"></object>
控制項使用教本:
<script defer>
function SetPrintSettings() {
// -- advanced features ,未曾使用過,有待確認。
factory.printing.SetMarginMeasure(2) // measure margins in inches
factory.SetPageRange(false, 1, 3) // need pages from 1 to 3
factory.printing.printer = ""
factory.printing.copies = 2
factory.printing.collate = true
factory.printing.paperSize = "A4"
factory.printing.paperSource = "Manual feed"
// -- basic features 使用過
factory.printing.header = ""
factory.printing.footer = ""
factory.printing.portrait = false //方向,true為豎向
factory.printing.leftMargin = 1.0
factory.printing.topMargin = 1.0
factory.printing.rightMargin = 1.0
factory.printing.bottomMargin = 1.0
factory.printing.Print(false) //直接列印,true ,好像不起作用,總是彈出選擇印表機視窗
factory.printing.PageSetup() //列印設定
factory.printing.Preview() //預覽列印
}
</script>
總體說來使用方便,但是需要在使用這個控制項的機器作設定,並且免費的版本功能不是很多,只能滿足一般需求。