




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Birt使用說明Birt適合版本:2.1.3文檔版本:V1.1 鄭威武,karl(我做了簡單修改) 最后修改時間:2010-01-27目 錄 TOC o 1-4 h z u HYPERLINK l _Toc252463429 一、前言 PAGEREF _Toc252463429 h 1 HYPERLINK l _Toc252463430 二、相關軟件 PAGEREF _Toc252463430 h 1 HYPERLINK l _Toc252463431 1.1、BIRT PAGEREF _Toc252463431 h 2 HYPERLINK l _Toc252463432 1.2、EMF和GE
2、F PAGEREF _Toc252463432 h 3 HYPERLINK l _Toc252463433 三、Birt的安裝和配置 PAGEREF _Toc252463433 h 3 HYPERLINK l _Toc252463434 四、使用說明 PAGEREF _Toc252463434 h 5 HYPERLINK l _Toc252463435 4.1、創(chuàng)建項目 PAGEREF _Toc252463435 h 5 HYPERLINK l _Toc252463436 4.2、創(chuàng)建第一個報表 PAGEREF _Toc252463436 h 7 HYPERLINK l _Toc2524634
3、37 4.2.1、創(chuàng)建一個空白報表 PAGEREF _Toc252463437 h 7 HYPERLINK l _Toc252463438 4.2.2、設置數據集參數 PAGEREF _Toc252463438 h 9 HYPERLINK l _Toc252463439 4.2.3、設計報表 PAGEREF _Toc252463439 h 14 HYPERLINK l _Toc252463440 4.3、報表中的參數 PAGEREF _Toc252463440 h 26 HYPERLINK l _Toc252463441 4.3.1、靜態(tài)標量參數 PAGEREF _Toc252463441 h
4、 27 HYPERLINK l _Toc252463442 4.3.2、動態(tài)標量參數 PAGEREF _Toc252463442 h 29 HYPERLINK l _Toc252463443 4.3.3、動態(tài)組合參數 PAGEREF _Toc252463443 h 31 HYPERLINK l _Toc252463444 五、應用系統(tǒng)的結合 PAGEREF _Toc252463444 h 31 HYPERLINK l _Toc252463445 六、BIRT的學習資料和缺點 PAGEREF _Toc252463445 h 45 HYPERLINK l _Toc252463446 6.1、學習資
5、料 PAGEREF _Toc252463446 h 45 HYPERLINK l _Toc252463447 6.2、缺點 PAGEREF _Toc252463447 h 45一、前言公司的一個Java語言的B/S架構項目中需要實現大量的文字報表和圖像報表的功能,以前使用CSS、JS和JfreeChart等技術,只能實現簡單的報表,很難達到現在需求,于是我研究了幾個開源免費的報表工具,通過網上的評價,發(fā)現了Birt有以下幾點優(yōu)點:1、開發(fā)方便,Birt是Eclipse的一個插件可以很好的集成在Eclipse中,圖形編輯框架下可以在幾分鐘之內做出一個報表。2、可以很方便地在一個報表中混合展現概要
6、數據和詳細數據。3、操作界面友好大方。4、提供了強大靈活的樣式定義,對于熟悉CSS的設計人員來說,應該可以設計出相當出色的報表樣式。5、集成在Eclipse中,不用再開啟別報表開發(fā)工具窗口,對于習慣于Eclipse開發(fā)的程序員來說這點非常重要。6、Birt的本地化做的很好,安裝以后操作界面就是中文的(這點我在使用過程中沒有充分體現,我使用了Birt的中文語言包)。7、開源的報表產品,有源代碼,可以進行深層的定制開發(fā)。8、生成的報表完全是XML格式,擴展性好。9、容易和應用系統(tǒng)結合。10、最重要一點是開源免費的(我窮?。?。根據這幾個優(yōu)點,我決定研究Birt,通過幾天查找資料和自己的摸索,心中總算
7、有些小的體會。由于習慣與Eclipse3.2版本,所以我使用了2.1.3版本的Birt,現在最新版本已經是2.3以上版本了,就是這個原因網上很多資料都不是很適合這個版本,所以我走了很多彎路,希望看到此文檔的人能比我少走彎路,這也是我寫這個文檔的原因之一。二、相關軟件相關的軟件分別為: HYPERLINK :/java.sun / Java 1.4.2/1.5 JDK/JRE HYPERLINK :/ /downloads/index.php Eclipse-SDK-3.2.0 HYPERLINK ://tools/gef/downl
8、oads/ Graphics Editor Framework (GEF 3.2) runtime HYPERLINK ://tools/emf/scripts/downloads.php Eclipse Modeling Framework (EMF 2.2.3) runtime HYPERLINK ://birt/downloads/ Birt 2.1.3Birt-runtime-2.1.3(發(fā)布時使用)NLpack1-birt-report-designer-all-in-one-2_1_3.zip(Birt
9、的中文插件)下載地址為: :/ /birt/phoenix/由于在使用過程中對Birt、GEF和EMF不是很理解其用處,所以我也找了一些資料(汗顏,我想大家都知道),下面我就分別簡單的介紹一下,如果大家都知道那就跳過去吧。2.1、BIRTBirt(Business Intelligence Reporting Tools)是一個Eclipse-based開放源代碼報表系統(tǒng)。,是為 Web 應用程序開發(fā)的基于 Eclipse 的開源報表系統(tǒng),特別之處在于它是以 Java 和 J2EE 為基礎。BIRT 有兩個主要組件:基于 Eclipse 的報表設計器,以及部署到應用服務器
10、上的運行時組件。Birt可以實現的報表格式有一下幾種,列表、圖表、混合報表、交叉表和信件文檔,在測試過程中,我只實現了列表、圖表和混合報表。聽說也可以實現交叉表和信件文檔,我沒有驗證這里就不介紹了。列表:列表是最簡單的報表。當列表變長時,你可以把相關數據增加到同一分組。如果數據是數字類型的,你可以輕松的添加到“總數”、“平均”、或其他匯總中。圖表:當需要圖表表現時,數字型數據比較好理解。BIRT 也提供餅狀、線狀以及柱狀圖標等?;旌蠄蟊恚汉芏鄨蟊硇枰摵弦陨纤械膱蟊順嫵蓡我晃臋n。例如,一份客戶聲明會列出客戶所需要的信息,為當前促進(promotions)提供文本,以及提供并行的出帳和入帳列表
11、。一份財政報表將包括聲明、圖表、表格,所有這些都將進行全方位的格式化,來匹配共有的配色方案。一份報表包括BIRT包含四個部分:數據、數據轉換、業(yè)務邏輯和表現形式。數據:數據庫、Web 服務、Java 對象,這些都可以作為 BIRT 報表源(Web 服務、Java 對象,我沒有驗證,不知道是否可行,大家都這樣說,我也照搬了)。BIRT 的 ODA(Open Data Access) 框架允許任何人構建新的 UI 以及運行時支持任何類型的表格式數據,單一報表可包含從任意多個數據源獲取數據。數據轉換:報表通過對數據的分類、統(tǒng)計、過濾以及分組來適應用戶需求。當然,數據庫能實現這些功能,當遇到普通文件和
12、 Java 對象時 BIRT 必須以 simple 數據源方式處理。BIRT 允許復雜的操作,比如總合分組、整體共計的百分比,等等。業(yè)務邏輯:真實世界的數據很少提供你理想的結構良好的報表。許多報表要求用具體邏輯把原始數據轉換成用戶的有用信息。如果該邏輯僅僅用于該報表,你可以用 BIRT 的 JavaScript 腳本支持。如果你的程序中已包含這些邏輯,你可以調用已有的 Java 代碼。表現形式:一旦數據準備好了,你可以在很大的范圍內選擇表現形式。表格、圖表、文字等等都可以。單一數據集可以有多種方式表現,而單一報表可以表現多個數據集。2.2、EMF和GEFEmf(Eclipse Modeling
13、 Framework)和Gef(Graphical Editor Framework)都是Eclipse的tools項目,在Eclipse中使用Emf對系統(tǒng)建模,如數據庫模型、網絡連接模型,甚至包括界面顯示模型(JAVA的事件模型)。Gef它是一套圖像編輯框架,用于開發(fā)圖形應用,如果你在Eclipse中使用過基于圖形設計的應用,例如UML建模,可視化軟件界面設計(VE)等,它們基本上都是基于GEF而開發(fā)出來的。至于Emf和Gef的具體使用方法和實現效果,這里就不做重點介紹了,畢竟我們研究的主要對象是Birt。Birt是基于Emf和Gef來實現的。三、Birt的安裝和配置3.1、插件安裝Birt
14、的安裝和Eclipse的其他插件的安裝一樣,但是我建議使用Link的方式,這樣結構上比較清晰,如果都放在Eclipse的plugins下,一是結構不清晰,二是如果以后不用拆分也很麻煩。雖然大家都知道怎么安裝Eclipse插件,但是我這里還要啰嗦一下,保持文檔的完整性。Eclipse的安裝大家想必都會把,直接解壓就可以了。在Eclipse根目錄下新建一個文件夾,我創(chuàng)建的為myplugins,把下載的GEF-runtime-3.2.zip、emf-sdo-runtime-2.2.3.zip、Birt-2.1.3.zip和NLpack1-birt-report-designer-all-in-one
15、-2_1_3.zip解壓在此文件夾下并重命名,每個文件下的下層目錄都為eclipse,如圖:分別在Eclipse根目錄下的links目錄下創(chuàng)建對應的映射文件,文件格式為.link,我創(chuàng)建文件如圖:內容如圖:創(chuàng)建完成,重啟Eclipse,重啟前在Eclipse快捷方式的目標中加上-clean強制加載插件,如圖:在下次使用Eclipse時記得去掉-clean,因為要檢查插件,所有速度會很慢。至此Brit就安裝完成了,簡單吧?安裝成功后在視圖中多了一塊報表設計的視圖,如圖3.2、all in one 方式 HYPERLINK :/ /birt/phoenix/ :/ eclip
16、/birt/phoenix/ 官網選擇對應的版本,下載集成開發(fā)環(huán)境。安裝一鍵搞定。萬事俱備只欠東風,下一步我們就開始激動人心的使用之旅,期待了吧?四、使用說明這里用一個簡單的例子來說明列表和圖形報表的實現過程。4.1、創(chuàng)建項目創(chuàng)建一名為TestReports的Web項目,如圖所示,文件=新建=項目選擇【Web Porject】雙擊輸入項目名稱,點擊【完成】4.2、創(chuàng)建第一個報表4.2.1、創(chuàng)建一個空白報表Eclipse切換到【表報設計】窗口,在WebRoot下創(chuàng)建一個文件夾reports,選中reports右鍵=新建=報表輸入testReport.rptdesign的報表名稱點擊【
17、下一步】選擇空白報表模板,點擊【完成】,一個空白的報表已經完成了。4.2.2、設置數據集參數1、創(chuàng)建數據源選中新創(chuàng)建的空白報表,進入【數據資源管理器】選中【數據源】右鍵=新建數據源,進入新建數據源窗口有很多類型的數據源,選擇第二個JDBC數據源,輸入數據源名稱“OracleJDBC”點擊【下一步】由于數據源為oralce數據源,首先要選擇oracle的驅動,點擊【管理驅動程序】點擊【添加】,選擇oralce數據庫的驅動程序,添加后JAR文件一欄中現實了剛剛添加的驅動程序,添加后點擊【確定】,返回【新建數據源】窗口,選擇驅動程序類、數據數據庫URL、用戶名和密碼(JNDI URL為數據源),點擊
18、【測試鏈接】,如果輸入的項全部正確會提示,鏈接成功點擊【完成】,數據源創(chuàng)建成功2、創(chuàng)建數據集合在【數據資源管理器】窗口,選中【數據集】,右鍵=新建數據集,進入新建數據集窗口輸入數據集名稱ryxx(人員信息),選擇剛剛創(chuàng)建的數據源(oracleJDBC),選擇數據集類型,我選擇的為“SQL 選擇查詢”,點擊【下一步】【可用數據項】一欄中顯示出可選擇的數據項(表),如果表空間和表過多,很難查找出創(chuàng)建數據集所需要的表,可以使用【應用篩選器】,在架構中選擇所在的表空間,篩選器中輸入表或表空間的關鍵子,類型包括,表、視圖和存儲過程,輸入條件后點擊【應用篩選器】,在【可用數據項】中現實出符合條件的表空間和
19、表。在右面一欄中我們可以輸入SQL語句,這個SQL語句可以手動自己輸入,也可以手動從【可用數據項】中拖入SQL需要的字段或表,來拼裝SQL語句,也可以選擇莫個表和字段雙擊。創(chuàng)建了兩個數據集分別為ryxx和ryxx_rb對應的SQL語句分別為:Ryxx:select gh,xb,xm,sfzhm from t_rygl_ryxx where gh04700 and gh04700 and gh05000 group by xb點擊【預覽結果】,可查看SQL語句對應的結果集,ryxx數據集對應的如圖3、計算列在一些報表中可能要對一些列進行計算生成新的列。點擊【計算列】 進入如下圖:點擊【新建】輸入
20、列名,選擇數據類型,輸入表達式添加計算列后,預覽效果如圖4.2.3、設計報表數據集已經創(chuàng)建成功,下一步就在報表中體現這些數據,設計出一個圖形和文字結合的報表。1、Paletta窗口此窗口存在各種控件,使用方法是,直接拖到空白的報表上,下面分別介紹這幾個控件的具體作用。Lable標簽輸入靜態(tài)文本標簽Text文本輸入靜態(tài)文本 DLable動態(tài)文本標簽顯示變量或表達式的值 Dtext動態(tài)文本顯示變量或表達式的值Image圖片可以在報表中插入圖片。Grid可以用它在報表中設置你的布局。List用于在報表中顯示list的信息Table用以顯示你的數據集。可以把創(chuàng)建的數據集做為一個Table直接拖入到報表
21、中,也可以先創(chuàng)建一個Table,然后拖入數據集中對應的字段。Table支持行列的合并,選中要合并的行列右鍵選擇【合并單元格】即可 Char用于在報表中顯示你的統(tǒng)計圖2、設計圖形選擇Table拖入到空白報表中,設計成兩行一列 選擇Char拖入到Table的明細數據行,選中表,在【屬性編譯器】中【屬性】中的【常規(guī)】中的【文本對齊】,選擇居中,選擇藍色為背景色。圖表類型選擇,餅圖;維選擇,二維并具有深度;輸出格式選擇,SVG,點擊【下一步】選擇數據集一項,選中【使用數據集】,從下拉列表中選擇ryxx_rb這個數據集,在數據預覽中出現此數據集的字段以及值,右鍵cxb列(或者直接拖入到扇面大小定義)選擇
22、【繪制為值系列】;右鍵xb列(或者直接拖入到類定義)選擇【用作類別系列】點擊【下一步】,選擇【圖形區(qū)域】輸入圖表標題,選擇背景色,選擇【圖形】選擇客戶區(qū)域背景,點擊區(qū)域格式也可以改變圖形布局,選擇【圖例】更改圖例的背景色和布局,布局更改為,方向,水平;位置,下方;定位,北;伸展,水平。點擊【系列】,更改著色依據,為系列增加標題點擊【類別系類】以更改最小扇面的最小值,數據排序,分組和更改扇形顏色的分配點擊【值系列】,點擊【標簽】更改標簽現實的內容點擊【完成】,此報表的一部分圖形已經完成,在報表編譯器中手動調整圖表的大小,點擊報表編輯器中的預覽,效果如下:3、設計列表選擇【大綱】面板選擇ryxx的
23、數據集,拖入到報表編輯器中選中列名右鍵【編輯】,更改為中文列名選中表,在【屬性編譯器】中【屬性】中的【常規(guī)】中的【文本對齊】,選擇居中選中第一行,右鍵=插入=行=在上面,選中新增加的行右鍵=合并單元格,右鍵=插入=標簽=輸入“職工詳細信息”選中表,在【屬性編譯器】中【屬性】中,更改字體和樣式,根據自己的喜好定義。選中表,在【屬性編譯器】中的【排序】點擊【添加】按鈕,選擇關鍵字(工號)和方向(升序),點擊【確定】,此列表按照工號升序的排序現實,此功能也可以使用SQL語句的order by來實現。同樣道理也可以實現分組。在表格下面增加一行,在第一個單元格插入【標簽】,并輸入“合計:”,其余三行合并
24、單元格,插入【數據】,輸入名稱,選擇數據類型點擊表達式后面的按鈕,雙擊可用列綁定=表=行數至此,一個簡單的報表就生成了,預覽如下:4.3、報表中的參數本節(jié)主要介紹標量參數,其他的參數形式請看原文(主要是還沒有研究透徹,如果研究透徹了我會更新我的文檔的),本節(jié)參照 HYPERLINK :/ ibm /developerworks/cn/opensource/os-cn-ecl-birt/index.html Birt 報表參數的使用。在生成上述簡單例子的過程中,有些人肯定要問,為什么不介紹報表中出現的參數?據條件查詢生成報表是最常見的一種格式,所以是非常重要的,這里我單獨的拿出來來做介紹。按著上
25、面的方法創(chuàng)建一個Testparameter的空白報表。參數是birt提供的一種很重要的機制,在birt 中,參數具有變量的作用,它為birt報表的生成提供了一種靈活強大的機制。本文示例使用 Birt 自帶的 Sample 數據源,用到的數據基于圖1所示的實體關系模型。從這個模型中可以看出,文中示例用到三張數據庫表分別為customers,orders和orderdetails。其中customers表的customernumber字段作為外鍵出現在orders表中,而orders表的ordernumber字段做為外鍵出現在orderdetails表中。圖 1. 實體關系模型在使用BIRT參數的
26、時候,首先要了解BIRT分為報表參數和數據集參數。報表參數定義于整個報表內,而數據集參數定義于某個數據集(DataSet)中。數據集參數使用的時候通常需要鏈接到某個報表參數或者利用綁定表(binding tab)和一個嵌套表中的某個數據元素綁定。標量參數是Birt報表中最簡單也是最基本的一類參數,標量參數可以分為靜態(tài)和動態(tài)兩種,其中靜態(tài)參數從用戶界面獲得用戶輸入的數據值,而動態(tài)參數則可以關聯至某一個數據集,因此可以獲得一個數據的集合,供用戶選擇。下面分別介紹這兩種參數。 4.3.1、靜態(tài)標量參數右鍵點擊【大綱】面板中的【報表參數】選項,在彈出的上下文菜單中點擊【新建參數】,彈出圖2所示編輯參數
27、對話框,在【名字】域輸入參數的名字,本例中使用的參數名字為“customernum”,此時【值列表】項默認為static。 點擊【確定】后返回到開發(fā)主界面。圖2:編輯參數創(chuàng)建名為SampleSet的數據集,見圖3,SQL語句為:select CUSTOMERNAME from CUSTOMERS where CUSTOMERNUMBER = ?圖3,創(chuàng)建數據集點擊【完成】,進入編輯數據集窗口,點擊【參數】=【新建】,輸入參數名稱,param;選擇數據類型,字符串;選擇方向,輸入;選擇鏈接到報表參數,customernum,點擊【確定】完成了數據集中參數的定義。當報表運行時,Birt會使用由報表
28、參數customernum傳入的值填充where條件,生成結果數據集。 如圖4所示。圖4,新建參數4.3.2、動態(tài)標量參數動態(tài)參數可以提供一個數據值的列表供用戶選擇,這種功能能夠極大增強報表設計用戶界面的交互性。 在本例中,首先定義一個數據集,這個數據集不使用參數,它從訂單表中查詢出所有的訂單號,為報表參數提供一個數據值的列表。 如圖5所示。圖5,數據集“ordernum”接下來,我們定義報表參數,這個參數鏈接至前面的ordernum,因此可以根據數據集中的參數ordernum動態(tài)的獲得可選值。 如圖6所示圖6,報表參數“ordernumpara”如圖中所示參數的【現實類型】選為“組合框”,【
29、值列表】選擇為“動態(tài)”,其鏈接至的【數據集】選擇為前面定義的ordernum數據集,同時選定【選擇值列】為數據集ordernum中的某個字段,這里ordernum數據集只有一個字段,故選擇為ordernumber。 這樣就將報表參數和數據集參數關聯起來。但這不是我們的最終目的,我們的目的是以報表參數ordernumpara為中介,向另一個數據集提供參數。 因此,我們定義圖7所示的數據集。圖7,創(chuàng)建數據集“ordersdetail”點擊【確定】,進入編輯數據集的窗口,點擊【參數】=新建,進入新建參數窗口,輸入名稱,選擇數據類型,選擇方向和連接到報表參數,點擊【確定】,如圖8圖8,創(chuàng)建本數據集的參
30、數num鏈接至ordernumpara,就完成藉由一個報表參數為中介將一個數據集的字段值鏈接到另一個數據集的參數的功能。4.3.3、動態(tài)組合參數動態(tài)組合參數是在數據集中不設計參數,在報表中設計參數,然后根據參數值自動加載。參數用腳本組合。五、應用系統(tǒng)的結合與現有的系統(tǒng)結合有兩種常見方式1、使用Birt自帶的runtime把Birt-runtime-2.1.3.zip解壓,把WebViewerExample 拷貝到% tomcat-Home%webapps目錄下。把你做好的*.rptdesign 和*.rptconfig文件放于% tomcat-Home%webapps report目錄下我們把
31、剛剛創(chuàng)建的第一個報表“testreport.rptdesign”,拷貝到report下,重啟Tomcat。輸入以下的連接,Run 是html 的形式顯示,看不出分頁效果,但利用ie的打印功能可以實現打印的。Frameset 是pdf形式顯示,可以看到分頁效果的。8080是tomcat的端口testreport.rptdesign是報表名report 是相對路徑的文件夾名 HYPERLINK :/:8080/WebViewerExample/run?_report=report/testEmploy.rptdesign :/:8080/WebViewerExa
32、mple/run?_report=report/testreport.rptdesign HYPERLINK :/:8080/WebViewerExample/frameset?_report=report/userTemplateA.rptdesign :/:8080/WebViewerExample/frameset?_report=report/testreport.rptdesign效果分別如下:點擊【打印】按鈕2,使用birt提供的Report Engine Api來調用報表并展現報表我們一開始就創(chuàng)建了一個名字為TestReports的WEB工程,
33、通過下面的步驟,做一個簡單的例子來調用和展示我們做的第一個報表。第一,把Birt-runtime-2.1.3.zip解壓,把根目錄中的ReportEnginelib下的所有文件導入到,WebRoot模塊下的WEB-INF目錄中的lib目錄下。第二,在WEB-INF目錄中新建文件夾platform,把ReportEngine下的plugins和configuration導入platform目錄下。第三,把數據庫的驅動程序導入到工程的lib目錄下第四,創(chuàng)建一個名字為BirtEngine的JAVA的類,具體代碼如下:package cn.sh.sungate.report.bean;import j
34、ava.io.InputStream;import java.io.IOException;import java.util.Properties;import java.util.logging.Level;import org.eclipse.birt.report.engine.api.EngineConfig;import org.eclipse.birt.report.engine.api.IReportEngine;import javax.servlet.*;import org.eclipse.birt.core.framework.PlatformServletContext
35、;import org.eclipse.birt.core.framework.IPlatformContext;import org.eclipse.birt.core.framework.Platform;import org.eclipse.birt.core.exception.BirtException;import org.eclipse.birt.report.engine.api.IReportEngineFactory;public class BirtEngine private static IReportEngine birtEngine = null;private
36、static Properties configProps = new Properties();private final static String configFile = cn/sh/sungate/report/bean/BirtCperties;public static synchronized void initBirtConfig() loadEngineProps();public static synchronized IReportEngine getBirtEngine(ServletContext sc) if (birtEngine = null
37、) EngineConfig config = new EngineConfig();if (configProps != null) String logLevel = configProps.getProperty(logLevel);System.out.println(logLevel+logLevel);Level level = Level.OFF;if (SEVERE.equalsIgnoreCase(logLevel) level = Level.SEVERE; else if (WARNING.equalsIgnoreCase(logLevel) level = Level.
38、WARNING; else if (INFO.equalsIgnoreCase(logLevel) level = Level.INFO; else if (CONFIG.equalsIgnoreCase(logLevel) level = Level.CONFIG; else if (FINE.equalsIgnoreCase(logLevel) level = Level.FINE; else if (FINER.equalsIgnoreCase(logLevel) level = Level.FINER; else if (FINEST.equalsIgnoreCase(logLevel
39、) level = Level.FINEST; else if (OFF.equalsIgnoreCase(logLevel) level = Level.OFF;config.setLogConfig(configProps.getProperty(logDirectory),level);config.setEngineHome();IPlatformContext context = new PlatformServletContext(sc);config.setPlatformContext(context);try Platform.startup(config); catch (
40、BirtException e) e.printStackTrace();IReportEngineFactory factory = (IReportEngineFactory) Platform.createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY);birtEngine = factory.createReportEngine(config);return birtEngine;public static synchronized void destroyBirtEngine() if (birt
41、Engine = null) return;birtEngine.shutdown();Platform.shutdown();birtEngine = null;public Object clone() throws CloneNotSupportedException throw new CloneNotSupportedException();private static void loadEngineProps() try / Config File must be in classpathClassLoader cl = Thread.currentThread().getCont
42、extClassLoader();InputStream in = null;in = cl.getResourceAsStream(configFile);configProps.load(in);in.close(); catch (IOException e) e.printStackTrace();第五,創(chuàng)建一個名字為WebReportServlet的Servlet的類,具體代碼如下:package cn.sh.sungate.report.servlet;import java.io.IOException;import java.io.PrintWriter;import java
43、.util.HashMap;import java.util.logging.Level;import java.util.logging.Logger;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet. . Servlet;import javax.servlet. . ServletRequest;import javax.servlet. . ServletResponse;import org.eclipse.birt.report.engine.
44、api.EngineConstants;import org.eclipse.birt.report.engine.api.HTMLRenderContext;import org.eclipse.birt.report.engine.api.HTMLRenderOption;import org.eclipse.birt.report.engine.api.IReportRunnable;import org.eclipse.birt.report.engine.api.IRunAndRenderTask;import org.eclipse.birt.report.engine.api.I
45、ReportEngine;import cn.sh.sungate.report.bean.BirtEngine;public class WebReportServlet extends Servlet /* * */private static final long serialVersionUID = 1L;/* * Constructor of the object. */private IReportEngine birtReportEngine = null;protected static Logger logger = Logger.getLogger(org.eclipse.
46、birt);public WebReportServlet() super();/* * Destruction of the servlet. */public void destroy() super.destroy();BirtEngine.destroyBirtEngine();/* * The doGet method of the servlet. * */public void doGet( ServletRequest req, ServletResponse resp)throws ServletException, IOException / get report name
47、 and launch the engineresp.setContentType(text/html);/ resp.setContentType(application/pdf);resp.setHeader(Content-Disposition, inline; filename=test.pdf);String reportName = req.getParameter(ReportName);ServletContext sc = req.getSession().getServletContext();this.birtReportEngine = BirtEngine.getB
48、irtEngine(sc);/ setup image directoryHTMLRenderContext renderContext = new HTMLRenderContext();renderContext.setBaseImageURL(System.getProperty(java.io.tmpdir);renderContext.setImageDirectory(System.getProperty(java.io.tmpdir);logger.log(Level.FINE, image directory + System.getProperty(java.io.tmpdi
49、r);HashMap contextMap = new HashMap();contextMap.put(EngineConstants.APPCONTEXT_HTML_RENDER_CONTEXT,renderContext);IReportRunnable design;IRunAndRenderTask task = null;try / Open report designdesign = birtReportEngine.openReportDesign(sc.getRealPath(/Reports)+ / + reportName);/ create task to run and render reporttask = birtReportEngine.createRunAndRenderTask(design);task.setAppContext(contextMap);HashMa
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 借款合同(協(xié)議)
- 2025年金屬磨擦支柱項目可行性研究報告
- 2025年路面水分滲透儀項目可行性研究報告
- 2025年窯爐轉彎機項目可行性研究報告
- 2025-2030中國特級初榨橄欖油行業(yè)市場運行分析及發(fā)展趨勢與投資研究報告
- 2025-2030中國燒烤調料行業(yè)市場發(fā)展分析及前景預判與投資研究報告
- 2025-2030中國火花隙行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 2025-2030中國游戲媒體行業(yè)發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 2025-2030中國注射鉤環(huán)行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 2025-2030中國水質處理器行業(yè)市場深度分析及前景趨勢與投資研究報告
- 2024國家安全教育大學生讀本題庫
- 2025屆高考語文二輪復習:文言文知識點與答題技巧匯編 講義
- Unit 5 Here and now Section A Grammar 說課稿 2023-2024學年人教版英語七年級下冊
- 地下綜合管廊建設項目可行性研究報告
- 基于多源異構數據的地質知識圖譜構建與應用
- 2024年領導干部任前廉政知識考試測試題庫及答案
- 《公共資源交易主體信用評價實施指南》編制說明
- 煤礦防突專項設計(樣本)
- 紹興銀行社會招聘真題
- 《儲水式電熱水器的安全使用年限》
- 路燈安裝工程項目實施重點、難點和解決方案
評論
0/150
提交評論