版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、報表設(shè)計器開發(fā)摘 要現(xiàn)在是信息社會,各種信息都需要處理并直觀展現(xiàn),如股票,物價等信息都需要通過數(shù)據(jù)報表來展現(xiàn)、分析,因此高質(zhì)量報表軟件系統(tǒng)具有重要的實際意義。 本論文課題研究探索了報表系統(tǒng)的開發(fā)方法與技術(shù),綜合應(yīng)用Eclipse、 JAVA 、JDBC、SWT/Jface、 RCP、XML、 CSS、DOM4J,IText,POI等先進(jìn)技術(shù),開發(fā)了基于WEB環(huán)境運行的報表設(shè)計器,實現(xiàn)了報表設(shè)計、模板生成、報表編輯,報表發(fā)布等基本功能,為進(jìn)一步開發(fā)實用的報表系統(tǒng)奠定了基礎(chǔ)。 關(guān)鍵詞:報表,SWT/Jface,Eclipse,XML,B/S,RCPAbstractNow is the inform
2、ation society, all kinds of information need to be addressed and visual display, such as stock ,prices and other information needed to demonstrate through data reports, analysis, the statements of high-quality software system has important practical significance.This paper statements subject to stud
3、y and explore the system development methods and technology, comprehensive application of Eclipse, JAVA, JDBC, SWT / Jface, RCP, XML, CSS, DOM4J, IText, POI, and other advanced technology, the development of the operating environment based on the statements WEB design , Achieved a report design, tem
4、plate generation, editing statements, issued statements of such basic functions, for the further development of practical system laid the foundation for statements.KEY WORDS: Report,SWT/JFace、Eclipse、XML、B/S、RCP 目 錄第一章 概述11.1 課題背景與意義11.2 報表系統(tǒng)發(fā)展概況2第二章 開發(fā)技術(shù)及環(huán)境42.1軟件環(huán)境42.2 主要開發(fā)技術(shù)4第三章 系統(tǒng)設(shè)計63.1系統(tǒng)體系結(jié)構(gòu)63.2
5、 軟件模塊結(jié)構(gòu)73.3數(shù)據(jù)源與系統(tǒng)文件結(jié)構(gòu)83.3.1 系統(tǒng)數(shù)據(jù)源8 系統(tǒng)文件結(jié)構(gòu)93.3.3 報表顯示部分文件13第四章 系統(tǒng)實現(xiàn)144.1主要實現(xiàn)算法14新建報表流程圖144.1.2 新建數(shù)據(jù)源流程圖15編輯單元格流程圖164.1.4 保存報表流程圖174.1.5 生成電子表格流程圖184.1.6 發(fā)布報表流程圖204.1.7 編輯CSS流程圖214.1.8 生成模板流程圖224.1.9 配置服務(wù)器流程圖234.2 系統(tǒng)編碼實現(xiàn)234.2.1 系統(tǒng)的主界面實現(xiàn)234.2.2 新建數(shù)據(jù)源324.2.3 新建報表344.2.4 編輯單元格354.2.5 生成電子表格364.2.6 發(fā)布報表40
6、4.2.7 編輯CSS424.2.8 生成模板444.2.9 報表保存454.2.10 配置服務(wù)器48第五章 系統(tǒng)典型界面515.1系統(tǒng)主界面515.1.1 編輯視圖界面525.1.2 屬性視圖界面525.1.3 服務(wù)器視圖界面535.1.4 數(shù)據(jù)源視圖界面535.2部分功能界面545.2.1 新建報表界面545.2.2 新建數(shù)據(jù)源界面555.2.3 設(shè)置CSS界面565.2.4 設(shè)置服務(wù)器參數(shù)界面575.2.5 設(shè)置報表參數(shù)界面58生成模板界面58第六章 課題總結(jié)60致謝62參考文獻(xiàn)63附錄65第一章 概述1.1 課題背景與意義現(xiàn)在是信息社會,各種信息都需要處理并直觀展現(xiàn),如股票,物價等信息
7、都需要通過數(shù)據(jù)報表來展現(xiàn)、分析,因此對高質(zhì)量報表軟件系統(tǒng)的需求非常強(qiáng)烈。報表設(shè)計工具是報表系統(tǒng)的重要組成部分,使用報表設(shè)計工具,可對企業(yè)以及其他用戶需要的各種報表進(jìn)行設(shè)計,并在報表引擎上運行。報表設(shè)計工具的功能包括數(shù)據(jù)源關(guān)聯(lián)與訪問、報表繪制、布局繪制、屬性編輯、腳本編輯、圖表編輯、表達(dá)式編輯、報表數(shù)據(jù)映射、報表預(yù)覽調(diào)試等??赏ㄟ^XML轉(zhuǎn)換技術(shù)將報表轉(zhuǎn)換換為PDF、Excel等格式輸出。隨著B/S應(yīng)用逐步取代C/S,市場上對Web環(huán)境下運行報表的要求日益強(qiáng)烈,C/S時期的報表工具紛紛進(jìn)行了若干改進(jìn)與加強(qiáng),支持B/S結(jié)構(gòu)。這些工具大都是對開源軟件進(jìn)行包裝改造,基本上有兩種流派:一類來自于FastR
8、eport這種基于Delphi的軟件,通過控件方式實現(xiàn)Web報表,進(jìn)而將報表計算移至服務(wù)器上進(jìn)行,再改進(jìn)為支持Linux;另一類來自于Jasper的基于Java的開源軟件。這些工具的整體思路還是沿襲了C/S時的方式,仍然是傳統(tǒng)的分組報表的模式,仍然無法解決表樣和大作量的代碼編寫問題,而且使用復(fù)雜,不能很好的發(fā)揮其效率,不能利用已有的軟件功能,同時他們都是利用SWING/AWT來開發(fā)的,界面難看。 因此,開發(fā)一個具有B/S結(jié)構(gòu)、能適應(yīng)中國國情、開源的、使用方便、界面美觀的報表設(shè)計器是一個很多用戶直期待的。但是,目前流行的報表軟件產(chǎn)品中,比較適合中國情況的產(chǎn)品還是不多。因此,
9、進(jìn)行本課題研究,開發(fā)報表設(shè)計器軟件,對于開發(fā)適合中國特點的實用報表系統(tǒng),促進(jìn)企業(yè)與社會信息化,具有很好的實際意義。1.2 報表系統(tǒng)發(fā)展概況信息化的初期階段,計算機(jī)作為一種新的生產(chǎn)工具,其主要功能是文字輸出,如文件打印、表格輸出等,相比較手工方式而言,工作效率大大提高。這個時期,用于報表生成的軟件主要是WPS表格、CCED、Excel等文字處理工具,這些工具僅僅是將手工繪制報表的方式改為電子處理方式,未涉及到報表數(shù)據(jù)的集中、共享等處理。更確切地說,這個時期還沒有真正意義上的報表工具。 隨著信息化程度的不斷提高,C/S應(yīng)用方式逐漸成熟,出現(xiàn)了很多報表
10、工具軟件,最著名的當(dāng)屬水晶報表和PB的DataWindow。水晶報表在上世紀(jì)一直被微軟OEM,成為VB的內(nèi)置報表工具,在微軟的強(qiáng)大支持下,VB龐大的用戶群為水晶報表培養(yǎng)了眾多應(yīng)用人員并積累了大量成功案例,從而產(chǎn)生了世界第一(用戶量)的報表工具。DataWindow 是 PB 中獲取專利技術(shù)的控件,它對數(shù)據(jù)的處理方法相當(dāng)簡潔,能處理各種顯示格式,快速的報表制作能力深受PB開發(fā)者的喜愛。 這些軟件的基本特征是單數(shù)據(jù)源、條帶式(BAND)分組統(tǒng)計模型,通過控件拖拽方式繪制報表,在不編碼的情況下能完成簡單地行式(分組)報表和單片交叉報表,數(shù)據(jù)集中在數(shù)據(jù)庫
11、中,可以共享。 但這一時期的用戶需求已經(jīng)與前一階段的需求大為不同。用戶希望放在數(shù)據(jù)庫中的數(shù)據(jù)能以自己熟悉的方式展現(xiàn)(復(fù)雜的表樣、統(tǒng)計運算等),而這些報表軟件的數(shù)據(jù)模型源于國外的報表習(xí)慣,解決復(fù)雜表樣的方法并不好,復(fù)雜的統(tǒng)計運算也要求開發(fā)人員編寫大量的程序代碼,導(dǎo)致報表開發(fā)時間太長,后期的維護(hù)工作量也很大。隨著B/S應(yīng)用逐步取代C/S,市場上對Web報表的要求越來越強(qiáng)烈,C/S時期的報表工具紛紛進(jìn)行了若干改進(jìn)與加強(qiáng),普遍支持B/S結(jié)構(gòu),新的報表軟件也如雨后春筍一樣不斷出現(xiàn)。 在報表工具的發(fā)展過程中,還有一類特殊的表格式產(chǎn)品,最著名有ormula1和
12、華表。這種類Excel 的工具,展現(xiàn)能力非常強(qiáng),但是因為沒有數(shù)據(jù)模型,導(dǎo)致其數(shù)據(jù)處理能力幾乎為零,程序員需要按格編寫代碼往里填數(shù)。相比較分組式報表工具,類Excel工具能徹底解決復(fù)雜報表的樣式問題,所以在實際應(yīng)用中它一直是與分組報表互補(bǔ)的一類產(chǎn)品。SWT/JFACE是Eclipse推出優(yōu)秀的JAVA圖形API。RCP,也就是富客戶端,是在Eclipse3.0之后分離出來的一個平臺。RCP技術(shù)其實就是插件開發(fā),可以在一個很小的模板上加入各種插件,擴(kuò)展性能。現(xiàn)在RCP已經(jīng)成為Eclipse開源項目的一個亮點,在國際上廣泛的使用大量PCR來開發(fā)桌面應(yīng)用程序。在RCP平臺上,可以使用Eclipse的插
13、件機(jī)制來快速開發(fā)獨立應(yīng)用的桌面應(yīng)用,從而輕松擁有Eclipse的界面結(jié)構(gòu)和界面元素,節(jié)省了很多開發(fā)精力。運用SWT/Jface和RCP技術(shù)來開發(fā)報表,是當(dāng)前報表開發(fā)的主流方向。一方面,SWT/Jface可以提供優(yōu)秀的圖形界面,克服JAVA桌面應(yīng)用界面難看的缺陷;另一方面RCP技術(shù)可以提高開發(fā)效率。聯(lián)合運用SWT/Jface和RCP技術(shù),可以開發(fā)出優(yōu)秀的報表產(chǎn)品。第二章 開發(fā)技術(shù)及環(huán)境2.1軟件環(huán)境本系統(tǒng)的開發(fā)環(huán)境:操作系統(tǒng): Window server 2003標(biāo)準(zhǔn)版應(yīng)用服務(wù)器: Tomcat5.5開發(fā)平臺:eclipse3.3 ;jdk1.52.2 主要開發(fā)技術(shù)SWT/JfaceSWT(St
14、andard Widget Toolkit )是標(biāo)準(zhǔn)控件工具集。Jface意為JAVA face。由于SUN的AWT/SWING技術(shù)在與本地界面融合方面存在缺陷,因此IBM開發(fā)了SWT,使得界面風(fēng)格和本地保持一致。而Jface是SWTa的擴(kuò)展包,采用MVC的設(shè)計模式,使用更加方面。RCPRCP(Rich Client Platform)意為富客戶平臺。在RCP平臺上,可使用Eclipse的插件機(jī)制來快速開發(fā)獨立應(yīng)用的桌面應(yīng)用,從而輕松擁有Eclipse的界面結(jié)構(gòu)和界面元素,節(jié)省了很多開發(fā)精力。Dom4j Dom4j (Document Object Model for JAVA)是一個易用的、
15、開源的庫,用于XML,XPath和XSLT。它應(yīng)用于Java平臺,采用了Java集合框架并完全支持DOM,SAX和JAXP。Dom4j使用起來非常簡單,效率高。只要了解基本的XML-DOM模型就能使用。POI POI(Point of Interest)意為為興趣點,是JAVA與MS Office交互時用到的第三方JAR,也是開源的,屬于Apache的一個項目,用法簡單。它主要用來讀寫OLE 2復(fù)合文檔結(jié)構(gòu),本系統(tǒng)主要用它來操作EXCEL。IText iText是著名的開放源碼的站點sourceforge一個項目,是用于生成PDF文檔的一個java類庫。通過iText不僅可以生成PDF或rtf
16、的文檔,而且可以將XML、Html文件轉(zhuǎn)化為PDF文件。用法很簡單,效率很高。Lomboz lomboz是用來開發(fā)j2ee應(yīng)用、免費eclipse插件,用它可以大大加快web開發(fā)、部署等工作。第三章 系統(tǒng)設(shè)計3.1系統(tǒng)體系結(jié)構(gòu)本系統(tǒng)采用三層B/S架構(gòu) ,分別為表示層、設(shè)計層和數(shù)據(jù)層,如圖3-1所示。(1) 表示層(Presentation-Tier) 是報表顯示層。本報表系統(tǒng)的表示層有三種類型:Web類型,Excel類型,Pdf類型。(2)設(shè)計層(Designer-Tier) 是本報表系統(tǒng)的重中之重。設(shè)計層設(shè)計的好壞直接影響到報表的使用。其主要任務(wù)是建立報表、修改報表、發(fā)布報表、生成模板等。這
17、涉及到報表的數(shù)據(jù)來源,報表的格式,報表輸出,是連接表示層和數(shù)據(jù)層的橋梁。(3)數(shù)據(jù)層(Data-Tier)主要是和用戶有關(guān)。本報表系統(tǒng)可以與幾種常用的數(shù)據(jù)庫系統(tǒng)交互。報表中可以輸入的數(shù)據(jù)很多,如圖表、序列號、常量等。數(shù)據(jù)層可以存儲并管理這些數(shù)據(jù)。 圖3-1系統(tǒng)體系結(jié)構(gòu)圖3.2 軟件模塊結(jié)構(gòu)本系統(tǒng)的軟件模塊結(jié)構(gòu),如圖3-2所示。 圖3-2 系統(tǒng)軟件模塊結(jié)構(gòu)圖圖3-2中各模塊的基本功能如下: 新建報表:設(shè)置報表的名字、每頁顯示數(shù)目、選用報表模板;把這些數(shù)據(jù)存到Preferences中,供保存報表使用。 新建數(shù)據(jù)源:設(shè)置數(shù)據(jù)源名稱,用它來標(biāo)識數(shù)據(jù)連接;選擇數(shù)據(jù)庫類型,并設(shè)置各種連接參數(shù);進(jìn)行數(shù)據(jù)源說
18、明;進(jìn)行連接測試;連接成功后把數(shù)據(jù)源名稱和各種連接參數(shù)保存到dataSource.xml文件中,供以后使用;而數(shù)據(jù)源說明就生成一個文本文件保存。 編輯單元格:設(shè)置單元格的數(shù)據(jù),如數(shù)據(jù)源列、函數(shù)、系列號、圖像;設(shè)置顏色,字體;設(shè)置所對應(yīng)的行列是否擴(kuò)展,所對應(yīng)的行列是否排序。這些都要用一定的格式保存起來,供報表顯示時使用。 保存報表:設(shè)置單元格屬性后,保存設(shè)置內(nèi)容。先從Preferences讀取報表相關(guān)數(shù)據(jù),然后生成報表的xml;遍歷表格,把表格各種信息填到xml中。編輯報表:保存表格后,如覺得不滿意,可以打開報表修改。讀取xml,把相關(guān)信息填到相應(yīng)的單元格。也可以設(shè)置報表的每頁的行數(shù)、報表發(fā)布者
19、、發(fā)布時間、報表說明。生成電子表格:電子表格可用來直接發(fā)布,也可用來編輯。先讀取報表xml文件,得到各個單元格的數(shù)據(jù)源,根據(jù)數(shù)據(jù)源不同,得到不同的數(shù)據(jù),并填到相應(yīng)的電子表格內(nèi)??梢栽O(shè)置電子表格的屬性。發(fā)布報表:先設(shè)置發(fā)布目錄,然后把項目文件夾下Files目錄下的名和Preferences中保存相同的,后綴名為xml、xls、css、pdf的文件都復(fù)制到發(fā)布目錄下。如發(fā)布目錄已有相同文件,就覆蓋。編輯CSS:CSS決定網(wǎng)頁頁面顯示格式,對報表非常重要。本系統(tǒng)提供一個模板,旁邊還有介紹各種標(biāo)記的代表的內(nèi)容的提示,這樣用戶就可以自己修改它。修改完后點“確定”,生成報表名+“.css”的樣式文件。生成
20、模板:CSS不是很難,但要做一個好看的格式卻很難,所心有必要把前面生成的CSS文件保存起來,提供下次使用。首先設(shè)置模板名字,然后設(shè)置說明,點“確定”后,系統(tǒng)會把當(dāng)前報表的CSS文件復(fù)制到模板xml文件,并生成說明的txt文件。配置服務(wù)器:配置發(fā)布目錄、端口、最大線程數(shù),以方便使用。3.3數(shù)據(jù)源與系統(tǒng)文件結(jié)構(gòu) 系統(tǒng)數(shù)據(jù)源報表就是數(shù)據(jù)的顯示,所以數(shù)據(jù)源很重要。本系統(tǒng)的數(shù)據(jù)源方案如下:(1) 提供建立數(shù)據(jù)源及管理數(shù)據(jù)源的功能。針對不同類型的數(shù)據(jù)庫數(shù)據(jù),建立相應(yīng)的數(shù)據(jù)源。建立了數(shù)據(jù)源后,就用一個XML文件保存數(shù)據(jù)源信息,以后可直接從XML文件讀取或修改連接信息。(2) 提供對其它類型數(shù)據(jù)源的支持。主要
21、支持EXCEL文件、函數(shù)、系列號、公式等數(shù)據(jù)源。EXCEL文件可以直接解析為WEB格式,而函數(shù),系列號,公式,圖像等可以直接插入。 系統(tǒng)文件結(jié)構(gòu)本系統(tǒng)作為一個桌面應(yīng)用系統(tǒng),涉及到許多文件系統(tǒng),不管用戶還是開發(fā)者,都有可能容易迷失在文件堆中,所以必須科學(xué)管理。為了解決此問題,本系統(tǒng)設(shè)計了系統(tǒng)主目錄文件結(jié)構(gòu),以下是系統(tǒng)主目錄的的文件截圖: 圖3-4 系統(tǒng)主目錄文件結(jié)構(gòu)圖 圖3-4中各文件的功能如下:.metadata文件夾:系統(tǒng)自動生成,保存有日志文件。.setting文件夾: 系統(tǒng)自動生成,用于保存項目的各個參數(shù)。Bin文件夾:存放已經(jīng)編譯過的JAVA的.class文件。DataSource文件
22、夾:存放數(shù)據(jù)源的dataSource.xml文件,其中還有各種.txt文件,用來說明各個數(shù)據(jù)源。該文件夾結(jié)構(gòu)如圖3-5所示: 圖3-5 DataSource文件夾示意圖Files文件夾:用來存放所生成的報表。其中有存放報表信息的xml文件,也有生成為電子表格的.xls文件、pdf文件。當(dāng)然也存放了報表說明的.txt文件,其結(jié)構(gòu)如圖3-6所示: 圖3-6 Files文件夾示意圖 圖3-6 Files文件夾結(jié)構(gòu)示意圖icons文件夾:用來存放圖象,如按鈕圖標(biāo)。intro文件夾:系統(tǒng)自動生成。lib文件夾:用來存放第三方JAR包。META-INF文件夾:系統(tǒng)自動生成,里面有MENIFEST.MF,在
23、這個文件里有描述插件各種信息基本信息。src文件夾:是源文件,其結(jié)構(gòu)如下圖所示:圖3-7 src文件夾示意圖從圖中可知,src文件夾包括兩個包,一個是xautreportdesign包,里面有Activator.java文件,這是RCP的激活類。另一個是com包。其實這個包里有三個子包:com. Xautreportdesign.action,主要用來存放菜單,工具欄動作類的;com. Xautreportdesign.util,主要用來存放一些工具類的,這些工具類對全局都有用;com.Xautreportdesign.win,主要是界面方面的類,有一些是自動生成后我修改的。com. Xaut
24、reportdesign.action包中的一部分類如圖3-8所示: 圖3-8 com. Xautreportdesign.action包中文件示意圖com. Xautreportdesign.util包中的類如圖3-9所示: 圖3-9 com. Xautreportdesign.util包中文件示意圖com. Xautreportdesign.win包中類類如圖3-10所示: 圖3-10 com. Xautreportdesign.win包中文件示意圖Template文件夾:是保存模板的文件夾,里面有模板文件.css文件,也有模板說明.txt文件,如圖3-11所示: 圖3-11 Templa
25、te文件夾示意圖.classpath、.project、perties、javaCompiler.args、plugin.xml、plugin_customization.ini都是系統(tǒng)自動生成的。build.xml:是用ant生成的,為系統(tǒng)打包用。Rduct:是要生成的新產(chǎn)品配置文件。splash.bmp:系統(tǒng)啟動時產(chǎn)閃動畫面使用。 報表顯示部分文件對于報表WEB顯示部分,有如下重要文件或文件夾:dataSource文件夾:存放數(shù)據(jù)源文件dataSourece.xml。photo文件夾:存放需要的圖片文件。.css文件:是報表的css文件。report.j
26、sp:是解析保存報表信息的.xml的文件。exceltoweb.jsp:是解析EXCEL并生成WEB的文件。第四章 系統(tǒng)實現(xiàn)4.1主要實現(xiàn)算法新建報表流程圖 圖4-1 新建報表算法流程圖 該算法首先判斷是否已有同名的報表,然后判斷行數(shù)是否為數(shù)字,最后存入Preferences中。 新建數(shù)據(jù)源流程圖 圖4-2 新建數(shù)據(jù)源算法流程圖 該算法先選擇合適自己的數(shù)據(jù)庫,然后輸入信息,最后連接,看是否成功,若成功就把信息保存起來。編輯單元格流程圖圖4-3 新建報表算法流程圖 該算法首先要得到當(dāng)前鼠標(biāo)的位置,然后轉(zhuǎn)化為表格的行列,最后選擇數(shù)據(jù)源,并設(shè)置單元格屬性。 保存報表流程圖 圖4-4 保存報表算法流程
27、圖該算法首先從Preferences中讀取報表相關(guān)信息,生成報表名的xml文件。然后遍歷表格,讀取各非空單元格的值及屬性,填入寫入小xml文件中,最后看是否用到模板,如用到,就生成報表名的css文件。生成xml的代碼如下所示:<XautReportFile Name="zainan" tempname="Template" rownum="8" ownerName="楊濟(jì)忠" time="2008年6月3日" intro="true"> <Columns&g
28、t; <Column DataSource="D:zainanDS.ID" Span="縱擴(kuò)展" Arrange="不排序" Color="RGB 255, 255, 255" Font="Tahom">A1</Column> 在XautReportFile中, “Name”代表報表的名字,“tempname”代表報表用到的模板,“rownum”代表WEB頁每頁顯示的行數(shù),“ownerName”代表作者,time代表發(fā)布時間,intro代表是否有說明內(nèi)容。而Columm代
29、表一個單元格,“DataSource”代表數(shù)據(jù)源,里面不同的部分又代表不同的意思:如前面為“D:”,那代表數(shù)據(jù)庫,中間代表前面建的數(shù)據(jù)源的名稱,最后代碼數(shù)據(jù)源的列。如前面是“I:”,那代表常量,后面部分就是常量的值。、如前面是“S:”,那代表系列號,后面代表系列號的一部分。如前面是“F:”,那代表的是函數(shù),后面是函數(shù)?!癝pan”,代表擴(kuò)展情況。擴(kuò)展就是其它單元格的值是否依賴這個單元格的值;“Arrange”代表是否排序;“Color”代表是顏色,;“Font”代表字體。而這個單元格的ID是A1。 生成電子表格流程圖 圖4-5 生成電子表格算法流程圖 該算法首先從Preferences中得到當(dāng)
30、前報表名,然后讀取報表XML文件,得到數(shù)據(jù)源名稱。讀取數(shù)據(jù)源XML,遍歷得到數(shù)據(jù)源的各種參數(shù)。用這些參數(shù)連接數(shù)據(jù)庫。用POI創(chuàng)建EXCEL文件。把數(shù)據(jù)庫中數(shù)據(jù)寫入EXCEL文件。 發(fā)布報表流程圖 圖4-6 發(fā)布報表算法流程圖該算法首先從Preferences中查看發(fā)布目錄,如有,就復(fù)制報表XML到發(fā)布目錄,如沒有,就設(shè)置。然后就開始判斷是否有相關(guān)文件,如有,就一同復(fù)制,因為不復(fù)制,就沒有用。 編輯CSS流程圖 圖4-7 編輯CSS算法流程圖該算法首先從CSS模板中讀出模板內(nèi)容,并顯示出來,提供用戶修改。修改完成后點確定,從Preferences得當(dāng)前報表,然后生成報表的CSS文件,如已有相同的
31、就覆蓋。最后把修改后的CSS寫入報表文件。 生成模板流程圖 圖4-8 生成模板算法流程圖 該算法首先設(shè)置要生成模板的模板名及說明。然后生成模板文件,當(dāng)然是CSS類型。如模板說明不為空,也生成文件文件類型的說明書。然后從Preferences中得到當(dāng)前報表,由此得到當(dāng)前報表的CSS文件,最后把這CSS文件的內(nèi)容寫入模板文件里。 配置服務(wù)器流程圖 圖4-9 配置服務(wù)器算法流程圖 該算法首先讀取服務(wù)器配置文件并顯示各個參數(shù),這可以修改。點確定后,就把修改后值寫入配置文件,并更新相關(guān)視圖。4.2 系統(tǒng)編碼實現(xiàn) 系統(tǒng)的主界面實現(xiàn)本系統(tǒng)采用Eclipse RCP技術(shù),也就是開發(fā)可以獨立運行的Eclipse
32、的插件。運用RCP技術(shù),可以實現(xiàn)與Eclipse一樣友好的界面,可以方便地組裝成一個很強(qiáng)大的系統(tǒng),因為這是采用插件機(jī)制。本系統(tǒng)的主界面如圖4-1所示: 圖4-1 報表設(shè)計系統(tǒng)主界面圖由圖4-1可以看到,本系統(tǒng)和Eclipse界面有很大的相似性。本系統(tǒng)主要用到了包。其中各個類的功能及重要代碼說明如下:Application類:是RCP程序的入口類,RCP程序啟動后第一個執(zhí)行就是它,它負(fù)責(zé)程序的載入與退出。這個類是建立項目后自動生成的,平常情況不需要修改。ApplicationWorkbenchAdvisor類:是配置工作臺的類,工作臺的初始化就在這完成。這個類是建立項目后自動生成的,可以修改成自
33、己需要的。這個類的部分代碼如下:ApplicationWorkbenchWindowAdvisor類:用來設(shè)置窗口。一個工作臺可以有多個窗口,所以可以多個該類的對象。這個類是建立項目后自動生成的,可以修改成自己需要的。下面代碼說明了窗口大小為(700, 550),有工具欄,窗口標(biāo)題,顯示狀態(tài)欄,生成系統(tǒng)托盤等。以下是該類的部分實現(xiàn)代碼:public void preWindowOpen() /* 設(shè)置窗口初始化的各種屬性 */IWorkbenchWindowConfigurer configurer = getWindowConfigurer();configurer.setInitialSi
34、ze(new Point(700, 550);configurer.setShowCoolBar(true);configurer.setShowStatusLine(false);configurer.setTitle("報表生成系統(tǒng)");configurer.setShowPerspectiveBar(true);configurer.setShowStatusLine(true);final IWorkbenchWindow window = getWindowConfigurer().getWindow();/* 創(chuàng)建系統(tǒng)托盤 */trayItem = initTr
35、ayItem(window);/* 如果支持系統(tǒng)托盤,則創(chuàng)建托盤的菜單 */if (trayItem != null) createPopupMenu(window);Perspective類:是透視圖類。透視圖是各個視圖,編輯面組成的一個專用的程序界面。本類是項目默認(rèn)生成,當(dāng)然也可以寫自己的視圖,只要實現(xiàn)IperspectiveFactory接口。下面就是本透視圖的布局部分代碼,效果如圖4-1所示。public void createInitialLayout (IPageLayout layout) String editorArea = layout.getEditorArea();la
36、yout.setEditorAreaVisible(true);layout.setFixed(false);/ layout.addView(View.ID,IPageLayout.LEFT, 0.25f, editorArea);IFolderLayout left = layout.createFolder("left", IPageLayout.LEFT,0.25f, editorArea);left.addPlaceholder(DatasourceView.ID);left.addPlaceholder(ServerView.ID);layout.getView
37、Layout(ServerView.ID).setCloseable(false);layout.getViewLayout(ServerView.ID).setMoveable(false);layout.addPlaceholder(editAreaView.ID, IPageLayout.TOP, 0.50f,editorArea);layout.addPlaceholder(AttributeView.ID, IPageLayout.BOTTOM, 0.25f,editorArea);layout.getViewLayout(AttributeView.ID).setCloseable
38、(false);layout.getViewLayout(AttributeView.ID).setMoveable(false);ApplicationActionBarAdvisor類:負(fù)責(zé)創(chuàng)建和配置工作臺窗口上主菜單,工具欄,狀態(tài)欄等,是報表各種功能模塊相關(guān)入口。下面的代碼是用來建立系統(tǒng)托盤項。其中new Separator()是畫一條分隔線,在菜單工具欄中也用到。public void fillTrayItem(MenuManager trayMenu) trayMenu.add(deployAction);trayMenu.add(new Separator();trayMenu.a
39、dd(exampleAction);trayMenu.add(aboutAction);editAreaView類:是編輯視圖類。視圖相當(dāng)于一個小窗口,顯示某一方面的內(nèi)容,可以在一個頁面上放置幾個視圖。視圖可通過兩種方式創(chuàng)建:一通過擴(kuò)展點:修改plugin.xml文件,設(shè)置視圖擴(kuò)展點,在最后一行的</plugin>前加入,下面的代碼說明了擴(kuò)展點是,視圖名字是“編輯區(qū)”,對應(yīng)的JAVA文件是,ID是視圖的標(biāo)識,為XautReportDesign.EditAreaView。對于其它視圖,都可以這樣創(chuàng)建:<extension point="org.eclipse.ui.v
40、iews"> <view name="編輯區(qū)" class="com.xautreportdesign.win.editAreaView" id="XautReportDesign.EditAreaView"> </view> </extension> 二通過繼承抽象類ViewPart類,要改寫類中createPartControl,setFocus方法。本視圖實現(xiàn)部分的代碼如下所示:public void createPartControl(Composite parent) cr
41、eateToolbar();if (!isedit) setPartName("編輯" + reportName); elsesetPartName("(未保存)編輯" + reportName);createTable(parent, colnum, rownum); 上面的代碼是實現(xiàn)視圖內(nèi)容,其中最重要的是createTable()方法。這個方法是在視圖中創(chuàng)建類似EXCEL中的表格。下面的代碼創(chuàng)建一個表格,并設(shè)置表格的樣式,部分代碼如下:Composite c1 = new Composite(parent, SWT.NONE);c1.setLayo
42、ut(new FillLayout();table = new Table(c1, SWT.SINGLE | SWT.HIDE_SELECTION| SWT.FULL_SELECTION);table.setHeaderVisible(true);table.setLinesVisible(true);table.setRedraw(true); 對于表格的列號,下面的代碼創(chuàng)建列名從A開始的20個列,其中得把數(shù)字轉(zhuǎn)化為字符型 ,其實現(xiàn)代碼如下: for (int i = 0; i < 20; i+) TableColumn column = new TableColumn(table,
43、SWT.CENTER);column.setText(" " + String.valueOf(char) (65 + i) + " ");column.pack();而對于行號,下面的方法把按鈕附加到每一行的第一列,在按鈕上寫數(shù)字。這樣做的原因是使表格可編輯。實現(xiàn)方法如下:Button b = new Button30;for (int i = 0; i < 30; i+) final TableItem item = new TableItem(table, SWT.NONE);item.setText(i + 1, " "
44、);editori = new TableEditor(table);bi = new Button(table, SWT.PUSH);bi.setText(" " + (i + 1) + " ");editori.grabHorizontal = true;editori.minimumHeight = bi.getSize().y;editori.minimumWidth = bi.getSize().x;editori.setEditor(bi, item, 0); 編輯是在屬性視圖完成的,所以需完成數(shù)據(jù)綁定。下面代碼的作用是數(shù)據(jù)綁定,它獲取鼠標(biāo)所
45、在單元格:table.addMouseListener(new MouseAdapter() public void mouseDown(MouseEvent event) Control old = editor1.getEditor();if (old != null)old.dispose();Point pt = new Point(event.x, event.y);final TableItem item = table.getItem(pt);if (item != null) int column = -1;for (int i = 0; i <= 20; i+) Rec
46、tangle rect = item.getBounds(i);if (rect.contains(pt) column = i;break; 要把表格內(nèi)容填到屬性視圖中相應(yīng)的組件上,實現(xiàn)的方法是首先得到屬性視圖,其中通過getter()方法得到視圖組件,這樣就可以修改組件的值,同時得到表格單元格的值,用字符串分析技術(shù)得到不同的值,并填充到屬性視圖table中。實現(xiàn)代碼如下:final int col = column;/ 數(shù)據(jù)綁定IViewPart vp = getViewSite().getPage().findView(AttributeView.ID);AttributeView av
47、 = (AttributeView) vp;Label titleLabel = av.getLabel1();String colId = String.valueOf(table.getSelectionIndex() + 1);titleLabel.setText("單元格:"+ String.valueOf(char) (64 + column) + colId);Combo combo = av.getCombo();Combo combo11 = av.getCombo11();Combo combo1 = av.getCombo1();Combo combo2
48、 = av.getCombo2();String columnValue = item.getText(column);int i = columnValue.indexOf("", 1);if (i = -1) combo.select(0);combo11.select(0);combo1.select(0);combo2.select(0); else String datasource = columnValue.substring(0, i);if (datasource.startsWith("F:") combo.select(2);com
49、bo11.setText(datasource.substring(2); else if (datasource.startsWith("S:") combo.select(1);combo11.setText(datasource.substring(2); else if (datasource.startsWith("D:") int n = datasource.indexOf(".");combo.setText(datasource.substring(2, n);combo11.setText(datasource.s
50、ubstring(n + 1); else if (datasource.startsWith("I:") combo.select(0);combo11.setText(datasource.substring(2); else combo.select(0);combo11.setText(datasource);AttributeView類:是屬性視圖類,也就是用來修改單元格的屬性。本視圖的重點工作是編輯單元格屬性,所以工作重點是和編輯視圖交互,部分代碼如下:public void fillInTable(final Composite parent)throws N
51、umberFormatException IViewPart vp = getViewSite().getPage().findView(editAreaView.ID);editAreaView eav = (editAreaView) vp;Table table = eav.getTable();int i = label1.getText().indexOf(":");String tableLocal = label1.getText().substring(i + 1);String colid = tableLocal.substring(0, 1);Stri
52、ng rowid = tableLocal.substring(1);char char1 = colid. toCharArray ();int k = char10 - 64;TableItem item = table.getItem(Integer.parseInt(rowid) - 1);String valueString = "" if (combo. getSelectionIndex() = 0) valueString = "I:" + combo11.getText() + "" + combo1.getText
53、()+ "" + combo2.getText(); else if (combo. getSelectionIndex() = 1) valueString = "S:" + combo11.getText() + "" + combo1.getText()+ "" + combo2.getText(); else if (combo.getSelectionIndex () = 2) valueString = "F:" + combo11.getText() + ""
54、+ combo1.getText()+ "" + combo2.getText(); else valueString = "D:" + combo.getText() + "." + combo11.getText()+ "" + combo1.getText() + "" + combo2.getText();item.setText(k, valueString);MessageDialog.openInformation(parent.getShell(), "修改成功&quo
55、t;, "修改成功!"); 上述代碼中,首先得到編輯視圖,然后得到視圖表格,最后定位到具體單元格。然后把各個控件的值按一定的格式寫入單元格。然后提示修改成功。DatasourceView類:顯示已有的數(shù)據(jù)源及數(shù)據(jù)源的列。主要是讀取Datasource文件夾下dataSourece.xml文件中的內(nèi)容,并把它們用樹形表示出來。ServerView類:是服務(wù)器視圖,顯示已發(fā)布到服務(wù)器上的報表文件,包括xml,excel,pdf文件。這是用TreeViewer來實現(xiàn)的,這個類采用MVC設(shè)計模式,必須實現(xiàn)setContentProvider,setLabelProvider方法。實現(xiàn)代碼如下:tree.setContentProvider(new ITreeContentProvider() private String path;public Object getChildren(Object el
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度智能停車系統(tǒng)車庫交易合同2篇
- 二零二五年度家政服務(wù)與家庭旅游策劃合同3篇
- 二零二五年度叉車維修保養(yǎng)與維修設(shè)備租賃合同2篇
- 2025年度綜合體物業(yè)房使用及公共設(shè)施維護(hù)協(xié)議3篇
- 二零二五年度大棚養(yǎng)殖廢棄物資源化利用合作協(xié)議2篇
- 二零二五年度文化旅游項目借款及旅游資源擔(dān)保服務(wù)協(xié)議3篇
- 二零二五年度保障性住房置換合同范本
- 二零二五年度ISO9001質(zhì)量管理體系認(rèn)證咨詢與實施合同3篇
- 二零二五年度加油站油品供應(yīng)與信息化建設(shè)合同3篇
- 船舶管系課程設(shè)計
- 女裝行業(yè)退貨率分析
- 領(lǐng)導(dǎo)溝通的藝術(shù)
- 純視覺方案算法
- 道士述職報告
- 綠色貸款培訓(xùn)課件
- 2024年七年級語文上學(xué)期期末作文題目及范文匯編
- 云南省昆明市五華區(qū)2023-2024學(xué)年九年級上學(xué)期期末英語試卷+
- 2023年生產(chǎn)運營副總經(jīng)理年度總結(jié)及下一年計劃
- 2023年中考語文標(biāo)點符號(頓號)練習(xí)(含答案)
- 施工圖審查招標(biāo)文件范文
- 布袋式除塵器制造工序檢驗規(guī)定
評論
0/150
提交評論