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