《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 其他 > 业界动态 > 基于Web的Java报表工具的开发与设计实现

基于Web的Java报表工具的开发与设计实现

2008-12-22
作者:刘治国
1 引言
??? 隨著Internet技術(shù)的飛速發(fā)展,基于Web的應(yīng)用軟件正逐步取代傳統(tǒng)的C/S模式軟件成為當(dāng)今應(yīng)用軟件的主流。原來(lái)C/S模式下簡(jiǎn)單的報(bào)表問(wèn)題,在Web軟件中卻成了瓶頸。如何適應(yīng)網(wǎng)絡(luò)技術(shù),讓報(bào)表工具在信息傳輸迅速的Internet上發(fā)揮更大的作用。成為了報(bào)表工具新的發(fā)展方向。
??? 本文基于Crystal Report 報(bào)表工具提供的底層Java SDK 接口函數(shù)" title="接口函數(shù)">接口函數(shù),分析了基于web的報(bào)表的具體應(yīng)用,設(shè)計(jì)了一個(gè)Web報(bào)表工具。具體實(shí)現(xiàn)了輸出格式轉(zhuǎn)化;報(bào)表數(shù)據(jù)的在線查詢;圖表展示以及報(bào)表的定制;Email發(fā)送;報(bào)表打印等功能。
2 Crystal Report報(bào)表工具簡(jiǎn)介
??? Crystal Report報(bào)表工具是一個(gè)被廣泛使用的企業(yè)級(jí)的報(bào)表設(shè)計(jì),報(bào)表輸出的工具。它提供了數(shù)據(jù)的報(bào)告、分析、信息傳遞以及與客戶的交互式功能。
2.1 Crystal Report簡(jiǎn)介
??? Crystal Report主要有Crystal Report設(shè)計(jì)器,Crystal Report應(yīng)用服務(wù)器" title="應(yīng)用服務(wù)器">應(yīng)用服務(wù)器,Crystal Report分析器,Crystal Report Java API接口。
??? 設(shè)計(jì)器:設(shè)計(jì)器支持絕大多數(shù)數(shù)據(jù)庫(kù),包括 SQL Server、Oracle、DB2等;能連結(jié)任何數(shù)據(jù)源并使用各種ADO與OLE DB連結(jié)功能。設(shè)計(jì)器支持簡(jiǎn)單圖表與圖案以及多層嵌套子報(bào)表、交叉報(bào)表等各種類型報(bào)表。 同時(shí)可以自行設(shè)定報(bào)表的外觀,如加上圖片、改變形式、色彩或字型等??梢宰屢话愕膱?bào)表制作如排序和過(guò)濾等工作變得更快更容易。還支持報(bào)表打印。可以實(shí)現(xiàn)復(fù)雜的報(bào)表計(jì)算、篩選、排序等功能。設(shè)計(jì)器可以生成各種圖表,還可以自定義擴(kuò)充函數(shù)和變量來(lái)滿足報(bào)表分析的要求。
??? 應(yīng)用服務(wù)器:是Web報(bào)表的執(zhí)行核心,將所設(shè)計(jì)的報(bào)表與Web應(yīng)用程序的緊密集成。主要用于報(bào)表和客戶端" title="客戶端">客戶端的交互。應(yīng)用服務(wù)器負(fù)責(zé)解析報(bào)表數(shù)據(jù)以及報(bào)表模板和底層數(shù)據(jù)庫(kù)的信息轉(zhuǎn)化。同時(shí)還提供了許多的JAVA API用于客戶端的開(kāi)發(fā)。
2.2 Crystal Report的體系結(jié)構(gòu)
????Crystal Report的體系結(jié)構(gòu)能夠很好的反映出報(bào)表的設(shè)計(jì)和開(kāi)發(fā)過(guò)程Crystal Report報(bào)表工具的開(kāi)發(fā)步驟如下:
首先在設(shè)計(jì)器里用JDBC/ODBC創(chuàng)建與相應(yīng)數(shù)據(jù)庫(kù)的連接,設(shè)置數(shù)據(jù)源和查詢語(yǔ)句,顯示并預(yù)覽取得的數(shù)據(jù)。
接著在設(shè)計(jì)器里設(shè)計(jì)報(bào)表模板,對(duì)表頭,表尾,數(shù)據(jù)區(qū)的具體設(shè)置。將預(yù)先取得的數(shù)據(jù)與報(bào)表模板進(jìn)行綁定。
將設(shè)計(jì)好的報(bào)表以.rpt文件存儲(chǔ)在指定目錄里,這是也可以將其轉(zhuǎn)化為別的文件形式,如xml,pdf,work等。
最后在Web上發(fā)布所設(shè)計(jì)的報(bào)表,啟動(dòng)RAS用于解釋報(bào)表的執(zhí)行。
??? 其體系結(jié)構(gòu)如圖 1 所示:

?

3 We3??? Web報(bào)表管理器的設(shè)計(jì)與實(shí)現(xiàn)" title="設(shè)計(jì)與實(shí)現(xiàn)">設(shè)計(jì)與實(shí)現(xiàn)
Web報(bào)表????管理器采用Crystal Report報(bào)表應(yīng)用服務(wù)器提供的Java SDK接口函數(shù),具體實(shí)現(xiàn)了輸出格式轉(zhuǎn)化;數(shù)據(jù)的布爾查詢;圖表展示以及報(bào)表的定制;Email發(fā)送;報(bào)表打印等功能。在具體實(shí)現(xiàn)上,用jsp+javabean結(jié)合RAS Java SDK技術(shù)實(shí)現(xiàn)? 術(shù)整個(gè)WEB報(bào)表工具設(shè)計(jì)。
3.3 Web報(bào)表功能的設(shè)計(jì)與實(shí)現(xiàn)
Web報(bào)表功能是基于WEB的報(bào)表在展示上的不同功能的實(shí)現(xiàn),這些功能都是基于Web/Java來(lái)實(shí)現(xiàn)的。功能的設(shè)計(jì)是基于Crystal Report 報(bào)表工具提供的底層Java SDK 接口函數(shù)。首先對(duì)Crystal Report應(yīng)用服務(wù)器的Java SDK結(jié)構(gòu)進(jìn)行分析。
3.3.1 RAS Java SDK分析
報(bào)表應(yīng)用服務(wù)器Java JDK提供了實(shí)現(xiàn)基于WEB的報(bào)表設(shè)計(jì)功能,從簡(jiǎn)單的報(bào)表生成,報(bào)表修改,到復(fù)雜的報(bào)表定制功能。Crystal Report報(bào)表應(yīng)用服務(wù)器本身就是一個(gè)c/s結(jié)構(gòu)的系統(tǒng),它有RAS 服務(wù)器(報(bào)表應(yīng)用服務(wù)器)和SDK組成。SDK提供與RAS服務(wù)器交互的接口。RAS服務(wù)器則與Web應(yīng)用服務(wù)器通信。下圖是RAS Java JDK 的結(jié)構(gòu)圖。


RSA SDK 有許多包含接口和類的Java包組成。SDK的結(jié)構(gòu)是一個(gè)MVC體系。圖中的 application packages 由controllers 類構(gòu)成,用來(lái)管理數(shù)據(jù)。在application packages里還有ReportClientDocument對(duì)象。ReportClientDocument對(duì)象是RSA SDK 創(chuàng)建并修改的報(bào)表文檔。Data package和definition package用來(lái)定義model。View實(shí)現(xiàn)model里的數(shù)據(jù)展現(xiàn)功能。View 可以直接訪問(wèn)數(shù)據(jù),也可以通過(guò)controllers 類來(lái)訪問(wèn)。通過(guò)controllers 類來(lái)訪問(wèn)數(shù)據(jù)可以實(shí)現(xiàn)數(shù)據(jù)的修改操作。
3.3.2功能的具體設(shè)計(jì)與實(shí)現(xiàn)
?? 通過(guò)RAS SDK提供的功能,Web報(bào)表功能主要實(shí)現(xiàn)輸出格式轉(zhuǎn)化;報(bào)表數(shù)據(jù)的在線查詢;圖表展示以及報(bào)表的定制;Email發(fā)送;報(bào)表打?。坏裙δ?。下面是詳細(xì)實(shí)現(xiàn):
輸出格式轉(zhuǎn)化:主要實(shí)現(xiàn)將Web上的以特定格式顯示的報(bào)表輸出為RTF,CSV,PDF,HTML,Excel, Word等格式。以便于報(bào)表文件的存儲(chǔ)和管理。在輸出格式轉(zhuǎn)化上用到的主要類有exportoptions 包下的ExportFormatOptions,ExportOptions以及ReportExportControl等。轉(zhuǎn)化為Word格式的實(shí)現(xiàn)為:(部分代碼)
//設(shè)置報(bào)表名和報(bào)表路徑
report =request.getParameter("rptName");
String rptPath = "C:\\Program Files\\Crystal Decisions\\Report Application Server 9\\Reports";
//創(chuàng)建RTFWordExportFormatOptions對(duì)象。
RTFWordExportFormatOptions? wordExpOpts;
wordExpOpts = new RTFWordExportFormatOptions();
//創(chuàng)建ExportOptions對(duì)象,設(shè)置word輸出選項(xiàng)及格式類型為word。
ExportOptions exOpts = new ExportOptions();
exOpts.setFormatOptions(wordExpOpts);
//創(chuàng)建ReportExportControl對(duì)象,加載" title="加載">加載報(bào)表文件。
? com.crystaldecisions.report.web.viewer.ReportExportControl expViewer ;
? expViewer= new com.crystaldecisions.report.web.viewer.ReportExportControl();
? expViewer.setReportSource(rptPath + "\\" + report);
? //加載ExportOptions對(duì)象。
? expViewer.setExportOptions(exOpts);
? //輸出并顯示word報(bào)表。
expViewer.processHttpRequest(request, response, getServletContext(), null);
? expViewer.dispose();
報(bào)表數(shù)據(jù)的在線查詢:主要有數(shù)據(jù)刷新和布爾查詢兩個(gè)部分。用到的類有application package; reportsource; lib等;其數(shù)據(jù)刷新和布爾查詢的實(shí)現(xiàn)如下:(部分代碼)
??? //與數(shù)據(jù)庫(kù)的交互要通過(guò)ReportServerControl對(duì)象。
serverControl.setReportSource(clientDoc.getReportSource());
serverControl.setEnableLogonPrompt(false);
serverControl.processHttpRequest(request, response, getServletConfig(). out);
//設(shè)置數(shù)據(jù)庫(kù)連接和讀取數(shù)據(jù)信息。
??? connInfos = new ConnectionInfos();
?connInfos = serverControl.getDatabaseLogonInfos();
?int size = connInfos.size();
?for (int x=0; x?????? ?iConnInfo = connInfos.getConnectionInfo(x);???
? iConnInfo.setUserName(uid);??
iConnInfo.setPassword(pwd);??}
??? //創(chuàng)建viewer對(duì)象瀏覽刷新數(shù)據(jù)。
??? CrystalReportViewer htmlViewer = new CrystalReportViewer();
??? htmlViewer.setDisplayToolbar(true);
??? htmlViewer.setReportSource(serverControl.getReportSource());
htmlViewer.setDatabaseLogonInfos(connInfos);
//從客戶端得到查詢條件,設(shè)置查詢變量。
??? String newSelFormula = "{"+s1+"}" + " " + s2 + " " + "\""+s3+"\"";
??? htmlViewer.setSelectionFormula(newSelFormula);
htmlViewer.processHttpRequest(request, response, getServletConfig().out)
圖表展示:用于對(duì)報(bào)表中的數(shù)據(jù)通過(guò)各種圖表(par, line, bar)的形式進(jìn)行形象化的描述,以便于更方便的對(duì)數(shù)據(jù)進(jìn)行分析比較。其實(shí)現(xiàn)如下:(部分代碼)
//圖表顯示主要進(jìn)行圖表?xiàng)l件字段和數(shù)據(jù)字段的設(shè)置。
??? //創(chuàng)建chartCondFlds對(duì)象和 chartDataFlds對(duì)象。
Fields chartCondFlds = new Fields();
Fields chartDataFlds = new Fields();
CDef.setConditionFields(chartCondFlds);
CDef.setDataFields(chartDataFlds);
//創(chuàng)建Chart對(duì)象并加載Cdef對(duì)象。
??? ChartObject Chart = new ChartObject();
??? Chart.setChartDefinition(CDef);
??? //加載圖表類型(par, line, bar)和位置(head, tail)等。
ChartStyleType = ChartStyleType.from_int(ChartStyleType._bar);
ChartPlacement = ChartPlacement.from_string(Placement);
??? ChartSection =(Section)Doc.getReportDefController().getReportDefinition()
??? Doc.getReportDefController().getReportObjectController()
add((IReportObject)Chart,(ISection)ChartSection,1);
報(bào)表的定制:主要用來(lái)實(shí)現(xiàn)對(duì)web報(bào)表的定制操作,如報(bào)表表頭,表尾的修改,text文本的修改,報(bào)表不同圖表的選擇修改等。Email功能的設(shè)計(jì)采用java提供的sendmail開(kāi)發(fā)包設(shè)計(jì);而打印功能則采用Crystal Report提供的打印工具包實(shí)現(xiàn)。
4 結(jié)束語(yǔ)
本文是基于Crystal Report 報(bào)表工具提供的底層Java SDK 接口函數(shù),分析了基于web的報(bào)表的具體應(yīng)用,設(shè)計(jì)了一個(gè)Web報(bào)表工具。在Web報(bào)表工具的實(shí)現(xiàn)上還有一些方面沒(méi)有考慮到,如web頁(yè)面的表現(xiàn),負(fù)載均衡以及工具功能的完善問(wèn)題等。下面的工作要進(jìn)一步解決上述問(wèn)題。
DESIGN AND IMPLEMENT OF THE REPORT TOOL BASED ON JAVA/ WEB
????????????????????????????????????? Liu Zhi-guo
(Shenyang Institute of Computing Technology, Chinese Academy of Sciences, Shenyang, Liaoning 110004)
Abstract: With the rapid development of the Internet. Applications based on the Web are taking place of the traditional applications based on the C/S, which takes the reports based on the web in trouble. This paper designs and implements a Web_based report tool by the Java SDK in the Crystal Report tools, which provides the format export, print, Email, query, chart and customizing report.
Key words: Crystal Report, Web Report, Java SDK, RAS

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。

相關(guān)內(nèi)容