周 屹
摘要:本系統(tǒng)使用XML作為報表的描述語言,利用.NET技術(shù)編寫打印控件。在打印報表時,把打印控件和報表傳遞給客戶端(瀏覽器)。系統(tǒng)根據(jù)用戶的要求,結(jié)合不同報表模板自動、動態(tài)的生成相應報表文件并完成打印。系統(tǒng)提供了強大的數(shù)據(jù)篩選、分析功能,為用戶決策提供了進一步支持。
關(guān)鍵詞:WEB報表XML.NET控件打印
隨著信息技術(shù)的普及與發(fā)展,在管理信息系統(tǒng)中,報表打印,作為不可缺少的一部分已被我們接受。可以這樣說,我們的應用系統(tǒng)絕大多數(shù)都涉及到報表的打印問題。
一、B/s結(jié)構(gòu)及報表打印的主要困難
因特網(wǎng)的出現(xiàn)給人們信息交流帶來了一場新的革命,通過它,人與人之間的時空距離大大縮短,工作效率大大提高。由于信息共享與效率提高的需要,用于企業(yè)內(nèi)部的Clien/Server結(jié)構(gòu)的應用程序已逐漸不能滿足人們的需要。越來越多的Browser/Server結(jié)構(gòu)的應用程序被提了出來。雖然B/S結(jié)構(gòu)的誕生帶來了不少好處,但也有許多不足。其中一個重要的問題是,報表打印明顯不如以前靈活、規(guī)范。許多普通的功能,如紙張的換頁排版、復雜報表的精確定位等,都無法做到像C/S結(jié)構(gòu)下那樣方便。要打印一張現(xiàn)在瀏覽器上看到的報表,其打印方式將僅僅是按照普通的頁面來處理,每一頁的頁眉、頁腳、標題及表頭都無法根據(jù)用戶的要求來實現(xiàn),特別是對于一些復雜報表和需要套打的報表更是無能為力。
目前解決WEB報表打印的途徑:水晶報表、使用現(xiàn)成的打印控件、AetiveX控件。
二、B/S結(jié)構(gòu)下遠程web報表打印系統(tǒng)的設(shè)計
(一)系統(tǒng)總體結(jié)構(gòu)。整個系統(tǒng)分成了三大部分。第一部分,為報表設(shè)計用戶根據(jù)自己的需要設(shè)計出相應的報表模板存入數(shù)據(jù)庫中。第二部分,為報表生成部分。用戶選擇相應模板,服務器解析相應模板并且結(jié)合用戶輸入的一些參數(shù),動態(tài)地生成了我們所需要的報表文件。第三部分,即報表的打印過程,就是分別把打印控件和第二部分中生成的報表文件傳送到客戶端,在本地進行解析打印,直接控制打印機進行輸出的過程。
(二)系統(tǒng)工作流程。對整個系統(tǒng)的工作流程,也分三大部分進行闡述。其中報表生成器部分僅對規(guī)整報表適用。
1、報表設(shè)計器部分。在本系統(tǒng)中,只是對規(guī)整報表設(shè)計器進行了實現(xiàn),具體步驟和方法如下:
首先,用戶在瀏覽器中輸入數(shù)據(jù)庫名稱,遠程連接數(shù)據(jù)庫服務器。若連接成功,則用該庫中的所有表名動態(tài)地填充下拉列表框,用戶從此下拉列表中選擇所需的數(shù)據(jù)表。第二步,輸入頁面設(shè)置信息。第三步,輸入報表的列數(shù)。第四步,輸入報表名稱和附加條目。第五步,點擊完成按鈕,生成報表模板存入數(shù)據(jù)庫中。
2、報表文件生成部分。(1)把模板數(shù)據(jù)庫中現(xiàn)有的所有報表模板的名稱動態(tài)地填入下拉列表框中供用戶選擇。(2)客戶端選擇所需打印的報表模板。(3)根據(jù)提取出的seleet語句,連接數(shù)據(jù)庫服務器,生成我們所需要的數(shù)據(jù)集。(4)根據(jù)第二步中提取出的查詢字段接口,動態(tài)生成報表的查詢頁面。(5)動態(tài)地生成報表文件,供打印使用。
3、報表的打印部分。無論是報表設(shè)計器還是報表生成器,它們最終的結(jié)果都是為了生成符合我們規(guī)定的XML報表文件,把它傳輸?shù)娇蛻舳诉M行打印。而完成這些打印工作的則是通過我們的編寫的打印控件進行的。通過打印控件對報表文件的解析和對打印機的控制,來實現(xiàn)我們所需要的諸如分頁、精確定位、格式控制等一系列功能。
(三)系統(tǒng)解決的主要問題。本系統(tǒng)的出發(fā)點主要是為了解決B/S結(jié)構(gòu)下報表打印的一些難點問題;為一般的小型系統(tǒng)不花費大量精力和財力的前提下,很好地解決B/S結(jié)構(gòu)下遠程報表打印的一些常見問題,主要包括以下幾種:解決規(guī)整報表的分頁問題、頁碼的打印。附加條目和復雜報表的精確定位、簡單套打的實現(xiàn)、對簡單的圖形報表的打印輸出做了一些初步的研究。
三、報表結(jié)構(gòu)的設(shè)計
(一)幾種常見的報表類型
1、規(guī)整報表:規(guī)整報表又稱長報表。它通常要分幾頁顯示,也是最常見的報表,其最大的特點是在固定的表頭下重復著若干行類型相同的記錄。
2、復雜報表:之所以稱之為復雜報表,是因為它的行列的分布不像規(guī)整報表那樣整齊、有規(guī)律。
3、套打報表:所謂套打,就是指在打印紙的規(guī)定位置上輸入相應的信息。與其它報表打印不同的是,它并不要完整的打印出報表的標題、邊框等信息,我們需要的是在規(guī)定的地方打印出相應的數(shù)據(jù)就可以了。
(二)報表設(shè)計器的實現(xiàn)
1、設(shè)計思路、要生成一個報表模板,首先確定的是這個報表所需的數(shù)據(jù)源;接下來確定頁面設(shè)置中的一系列信息;確定報表的列數(shù);設(shè)置報表名稱、附加條目信息、各列的標題、各列的寬度;為每列選擇對應的字段:選擇用作篩選數(shù)據(jù)用的接口字段與需要進行小計的字段。我們把所有的這些信息提取出來,按照相應的規(guī)則組成XML模板。
2、步驟與方法。1) 先需要確定報表設(shè)計的數(shù)據(jù)源。2) 列出數(shù)據(jù)庫中的所有表名,動態(tài)地填充到下拉列表框中,供用戶選擇。3) 輸入頁面設(shè)置信息和報表的列數(shù)。4) 彈出報表設(shè)計界面。5) 報表模板的生成。
四、結(jié)論與展望
本系統(tǒng)主要完成了遠程報表打印時,瀏覽器打印功能無法完成的一些功能。通過自己編寫的打印控件在客戶端對XML格式的報表文件進行格式解析,直接控制本地打印機進行輸出。對于打印控件和報表文件,是利用H,ITP協(xié)議通過默認的80端口進行傳輸,從一定程度上提高了系統(tǒng)的安全性。
雖然本系統(tǒng)只給出了簡單的規(guī)整報表設(shè)計器,但是其它類型的報表模板的結(jié)構(gòu)設(shè)計是作者對現(xiàn)有的比較流行的設(shè)計器生成的模板文件進行分析后總結(jié)出來的,以后完全可以在B/S結(jié)構(gòu)下完成其它類型報表的設(shè)計器。在結(jié)構(gòu)的組織上,本系統(tǒng)充分考慮到以后的擴展,如果我們要增加其它類型報表的打印,只要定義出相應的格式控制標簽和增加相應的解析程序,對原來的結(jié)構(gòu)無需做大的改動。
雖然打印控件是用.NET技術(shù)編寫的,但是它的運行對服務器端沒有任何要求。如果服務器端能夠用其它的方式提供相應格式的XML報表文件,利用此打印控件將不會對原來的服務器系統(tǒng)造成任何負擔。而對遠程客戶端,則不需要在打印時進行下載注冊或是安裝特定的打印系統(tǒng)。