Web打印控件设计
???? 我前一段時間開發一個B/S項目,需要用到打印功能,如是上網到處查找有關Web打印的控件(呵呵,我向來比較喜歡使用成熟的控件,這樣用不著自己去開發,自己開發很多時候是費力不討好,再說一個三五幾百塊的注冊費用,俺還是付得起,自己去搞費上幾天功夫,其工錢遠不止這個數。),可是找來找去,挺讓我失望的,真沒想到一個Web打印有這么難嗎,網上流傳的商業Web打印控件,其復雜程度讓我望而卻步,不得不自己搞了一個Web打印控件,在項目中用起來挺順心的,后來有幾個朋友,也要用到Web打印的功能,我就把我這個控件發給他們,他們說用起來也挺不錯的。
?????現在網上流傳的Web打印控件,在我看來主要是分兩種,一種是水晶報表派,一種是IE打印派。水晶報表派當然是以水晶報表為代表,這種的特點是先設計好報表文件,然后在程序中組織好數據源,調用報表文件,然后進行預覽或打印。而IE打印派,國內的Web打印控件通常都是這一種,在用戶客戶端注冊一個Activex控件,然后用JavaScript定義報表的格式,定義報表的數據內容(也可以通過URL讀取),然后再用Windows的打印API進行預覽或打印。
?????水晶報表作為微軟推薦的報表工具,其功能強大,但是目前只能用于.NET平臺,其通用版本的功能也有限制,比如不能直接打印,不能自定義紙張的大小等。而IE打印,我也下載過幾個控件試用,發現其報表設計繁瑣,既當爹又當媽的,既要用JavaScript定義報表的格式,又要組織報表的數據,仿佛一下子回到DOS時代,一個操作窗口,需要自己先計算好各顯示的坐標,然后再一一的畫出來,這樣的報表設計用起來使人發狂,一二個報表還可以勉強對應,要是多做幾個就累死人了,而且以后維護修改也很麻煩。
?????作為報表設計的核心,我想不論是C/S架構,還是B/S架構,無非就是兩點,一是報表的數據源,二是報表的格式。無論報表多么復雜,都脫離不了這兩點。作為報表的數據源,我們習慣用SQL語句產生,當然對于過分復雜的分析報表,有時候我們也不得不先產生臨時表,通過較復雜的程序把數據組織好,再進行打印。報表的格式我們通常利用報表設計工具把報表設計好,然后作為文件保存。程序中打印報表,通常是先組織好數據集,然后調用報表文件,傳遞報表所需參數,最后進行報表的預覽或打印。
?????C/S架構下的打印很成熟,用戶一般只需單擊按鈕,就可以把報表預覽或直接打印出來。報表的設計也很成熟,無論是古老的FoxPro,還是VB、Delphi都可以進行方便高效的報表設計,只要報表不是很復雜,工具熟練,一天做十幾份報表都可以的。
?????我想作為B/S架構的報表也可以借鑒C/S架構的設計理念進行設計,堅持報表的數據源和報表的格式分開,用做C/S架構的報表工具來做B/S架構的報表,這樣既可以做到C/S架構下報表設計的方便高效,又可以做到B/S架構的分布性。當然由于B/S架構的特殊性,現有的打印,特別需要用到自定義紙張大小和直接打印等功能,不得不采用Activex控件。
?????我按照用C/S架構的報表工具來設計B/S架構報表的理念,設計開發了自己的Web打印控件,該控件的報表工具是FastReport,該報表工具的功能可以和水晶報表媲美,使用起來也挺簡單的,為了適應中國式報表的劃線,我還在FastReport的基礎上開發6個設計按鈕:縮放寬度最小、縮放寬度最大、縮放高度最小、縮放高度最大、水平首尾對齊、垂直首尾對齊,利用這6個按鈕,則加上FastReport的邊框和對齊功能,就可以很高效很準確的劃出表格線。
?????有了這個設計工具,我們就可以很高效的設計報表了,不再需要自己一筆一劃的很原始的方式去畫報表。但還需解決一個問題,就是服務端的數據和報表格式如何傳遞到客戶端電腦。XML作為網絡通用語言可以作為傳遞的載體,當然這其中要進行相應的轉換,不同語言,不同數據庫可能轉換不一樣,我在示例中詳細列出了常用的語言和數據庫如何進行轉換,有興趣的朋友可以下載回來,看一下就明白了。
?????我設計的這個Web打印控件當然也不是百分之百的完美,因為一次性把報表的數據傳遞給客戶端,若數據過于龐大(我測試過打印50頁報表,在2M的網絡帶寬也只要一二秒鐘,因為數據量也只有一二百K,傳送也會很快的。不過要是那種利用IE打印功能的所謂輕量級的打印控件,你就等著IE假死,再過一二分鐘再有反應吧,呵呵。),則用戶等待的時間過長,這個可以在程序中控制,檢測數據超過多少頁,提示用戶分次打印就可以避免此問題。
?????報表控件本身有700多K,不過我覺得這個倒不是什么問題,就是2M的帶寬也只需三四秒鐘就可下載完,那些所謂的輕量級打印控件,也有200多K,只要報表控件好用,再大一點也無所謂,反正就下載一次而已。還有報表還沒有申請數字用證,以后如果用的人多了,有了銀子,我會去申請的,哈哈。不過作為Activex控件之王的Flash控件,現在都改為手動安裝了,看來這個也無所謂了,大家也用不著把白白花花的銀子交給微軟去搞什么用證了。
?
我設計的Web打印控件的演示網址:http://www.xinyuerj.com/ASP/
???????????????????????????????????????? ??? http://www.xinyuerj.com/ASP.NET/
轉載于:https://blog.51cto.com/614337/513791
總結
- 上一篇: 显示内容长时,显示部分内容,鼠标移入显示
- 下一篇: 每个即将成为或想成为网络工程师最想看的文