日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

用FASTREPORT實(shí)現(xiàn)WEB應(yīng)用中自定義報(bào)表

 WindySky 2009-02-10

開(kāi)發(fā)WEB應(yīng)用系統(tǒng)通常都會(huì)遇到報(bào)表打印問(wèn)題。簡(jiǎn)單應(yīng)用可利用IE的頁(yè)面打印功能,利用HTML標(biāo)簽控制格式來(lái)實(shí)現(xiàn)。但復(fù)雜的業(yè)務(wù)型應(yīng)用系統(tǒng),報(bào)表不僅是組成應(yīng)用的重要部分,還常常是相當(dāng)復(fù)雜的?,F(xiàn)在很多應(yīng)用系統(tǒng)都要求提供自定義報(bào)表的功能——即客戶(hù)可以自行設(shè)計(jì)、修改報(bào)表。

C/S結(jié)構(gòu)系統(tǒng)中,報(bào)表問(wèn)題有很多成熟的解決方法。如DELPHI開(kāi)發(fā)工具不僅自帶有報(bào)表控件,還可以利用第三方控件來(lái)實(shí)現(xiàn)快速靈活的報(bào)表制作和打印,其中有名的控件是FR-Software & A.Tzyganenko FastReportFastReport提供了能與DELPHI無(wú)縫集成的從設(shè)計(jì)到打印的完整控件包,提供的設(shè)計(jì)界面友好靈活,對(duì)于開(kāi)發(fā)可讓用戶(hù)自定義報(bào)表的C/S應(yīng)用來(lái)說(shuō),是一種很好的解決方式。

B/S結(jié)構(gòu)應(yīng)用中,Crystal Report是一種大型報(bào)表系統(tǒng)常用和推薦的解決方案。但Crystal Report目前價(jià)格昂貴,而且該系統(tǒng)相當(dāng)龐大。它的可定制性及精確控制打印效果方面尚不夠完善。當(dāng)然,在目前市場(chǎng)上,它仍是一種首選的WEB應(yīng)用的報(bào)表解決方案。
如果能將C/S應(yīng)用中成熟的報(bào)表解決方案搬到B/S應(yīng)用中,相信對(duì)于大部分開(kāi)發(fā)人員來(lái)說(shuō),都是非常歡迎的。本文將講述一個(gè)在JAVA環(huán)境中利用FastReport實(shí)現(xiàn)B/S應(yīng)用中用戶(hù)可自定義的報(bào)表解決方案。因?yàn)楣P者近段時(shí)間正用DELPHI、JAVA做一些項(xiàng)目,所以樣例代碼就以DELPHI、JAVA編寫(xiě)。

 

本解決方案樣例的基本環(huán)境是:WINDOWS 2000 SERVER+SQL SERVER 2000+TOMCAT 4.0。開(kāi)發(fā)工具:IntelliJ IDEA 3.0DELPHI 5.0??蛻?hù)端為IE 5.0瀏覽器。

方案共要求用DELPHI編寫(xiě)兩個(gè)程序,一個(gè)是將被包含在網(wǎng)頁(yè)中并在瀏覽器中運(yùn)行的ACTIVEX.ocx),一個(gè)是運(yùn)行在服務(wù)器端的報(bào)表處理程序,中間通過(guò)JAVA程序連接——或任何其他WEB語(yǔ)言都可以,如ASP、PHP等。方案的基本原理圖如下:

報(bào)表設(shè)計(jì)過(guò)程
   

報(bào)表打印過(guò)程
 
REPORT SERVER:可以做成一個(gè)普通的WINDOWS程序,也可以做成一個(gè)COM程序(Automation Object)。在報(bào)表設(shè)計(jì)過(guò)程中,用戶(hù)端(ACTIVEX)向WEB SERVER發(fā)送報(bào)表設(shè)計(jì)請(qǐng)求,請(qǐng)求中包含要設(shè)計(jì)報(bào)表的名稱(chēng);WEB SERVER 收到該請(qǐng)求后,調(diào)用REPORT SERVER請(qǐng)求設(shè)計(jì)的報(bào)表文件;REPORT SERVER收到請(qǐng)求后,先裝載報(bào)表的數(shù)據(jù)環(huán)境,然后將報(bào)表設(shè)計(jì)文件(.frf)和該報(bào)表的數(shù)據(jù)環(huán)境文件壓縮成一個(gè)包文件(.zip),將該包文件的完整路徑名返回給WEB SERVER調(diào)用程序;WEB SERVER將包文件回送給用戶(hù)端(ACTIVEX),用戶(hù)端將接收到的包文件保存到本地硬盤(pán)上,并解壓縮,從數(shù)據(jù)環(huán)境文件中恢復(fù)數(shù)據(jù)環(huán)境,通過(guò)FASTREPORT的相應(yīng)控件打開(kāi)報(bào)表文件給用戶(hù)提供可視化設(shè)計(jì)。用戶(hù)在ACTIVEX中設(shè)計(jì)報(bào)表時(shí),雖然不能和數(shù)據(jù)庫(kù)連接,但因數(shù)據(jù)環(huán)境已存在,所以用戶(hù)仿如在通常的C/S應(yīng)用結(jié)構(gòu)下設(shè)計(jì)報(bào)表,能正常地看到報(bào)表的數(shù)據(jù)字典信息。在報(bào)表打印過(guò)程中,用戶(hù)端(ACTIVEX)向WEB SERVER發(fā)送報(bào)表打印/預(yù)覽請(qǐng)求,請(qǐng)求中包含要打印/預(yù)覽的報(bào)表名稱(chēng);
WEB SERVER 收到該請(qǐng)求后,調(diào)用REPORT SERVER請(qǐng)求打印或預(yù)覽的報(bào)表文件;REPORT SERVER收到請(qǐng)求后,先裝載報(bào)表的數(shù)據(jù)環(huán)境,然后裝載報(bào)表文件(.frf),接著在無(wú)界面狀態(tài)下運(yùn)行報(bào)表,最后將生成的已準(zhǔn)備的報(bào)表文件(.frp)壓縮成一個(gè)包文件(.zip),將該包文件的完整路徑名返回給WEB SERVER調(diào)用程序;WEB SERVER將包文件回送給用戶(hù)端(ACTIVEX),用戶(hù)端將接收到的包文件保存到本地硬盤(pán)上,并解壓縮,通過(guò)FASTREPORT的相應(yīng)控件打開(kāi)報(bào)表文件(.frp)給用戶(hù)預(yù)覽或打印或重新調(diào)整格式或輸出為其他格式文件。用戶(hù)在ACTIVEX中預(yù)覽報(bào)表,仿如在通常的C/S應(yīng)用結(jié)構(gòu)下預(yù)覽報(bào)表。

 

WEB SERVER:提供通常的WEB服務(wù)功能。

ACTIVEXActiveXMicrosoft提出的一組使用COMComponent Object Model,部件對(duì)象模型)使得軟件部件可在網(wǎng)絡(luò)環(huán)境中進(jìn)行交互的技術(shù)集。它與具體的編程語(yǔ)言無(wú)關(guān)。作為針對(duì)Internet應(yīng)用開(kāi)發(fā)的技術(shù),ActiveX被廣泛應(yīng)用于WEB服務(wù)器以及客戶(hù)端的各個(gè)方面。本方案中的ACTIVEX控件主要做兩方面的事情,一是利用FASTREPORT控件進(jìn)行報(bào)表處理,包括報(bào)表設(shè)計(jì)(.frf文件)和報(bào)表打?。?span lang=EN-US>.frp文件)。一是與WEB SERVER進(jìn)行通信,請(qǐng)求和接收包文件。本文樣例的ACTIVEX采用DELPHI 5.0編寫(xiě)。

 

下面分述各部分的一例具體實(shí)現(xiàn)(因?yàn)閮H為說(shuō)明方案的實(shí)現(xiàn),所以很多代碼細(xì)節(jié)都進(jìn)行了簡(jiǎn)?。?/span>

一、             REPORT SERVER

REPORT SERVER既可以做成一個(gè)普通的WINDOWS程序,也可以做成一個(gè)COM程序(Automation Object)。本例中為簡(jiǎn)化見(jiàn),采用普通的WINDOWS程序?qū)崿F(xiàn)。

DELPHINEW一個(gè)應(yīng)用程序。在FORM中加入TfrReportTfrDBDataSet、ADOConnectionTADOQuery等控件——為了使用FASTREPORT的控件,需要安裝該控件包,可從站點(diǎn)http://www. 下載,國(guó)內(nèi)很多軟件站點(diǎn)都提供該控件包的下載。其中TfrDBDataSet、TADOQuery控件視應(yīng)用需要可加入多個(gè),另外為了壓縮文件,還要加入一個(gè)壓縮控件,本例使用VCLZip。在Form1中加入三個(gè)函數(shù):preDesignReport(rpFileName:String),prePrintReport(rpFileName:String),zipReportFiles(rpFileName:String),分別用于準(zhǔn)備報(bào)表設(shè)計(jì)文件、準(zhǔn)備報(bào)表打印文件、壓縮報(bào)表文件 。Form1.Create方法為:

 

procedure TForm1.FormCreate(Sender: TObject);

var

        rpFileName,mode:String;

begin

        if paramCount>1 then

        begin

                mode:=paramStr(1);

                rpFileName:=paramStr(2);

                if mode='d' then   //設(shè)計(jì)報(bào)表

                        if preDesignReport(rpFileName) then
   zipReportFiles(rpFileName);

                if mode='r' then   //打印報(bào)表

                        if prePrintReport(rpFileName) then

                                zipReportFiles(rpFileName);

        end;

        Application.Terminate;

end;

程序根據(jù)調(diào)用參數(shù)判斷是準(zhǔn)備報(bào)表設(shè)計(jì)文件還是準(zhǔn)備報(bào)表打印文件,接著調(diào)用相應(yīng)的過(guò)程來(lái)實(shí)現(xiàn)。最后的Application.Terminate 是讓程序執(zhí)行功能后即退出——因?yàn)檫@是服務(wù)端程序,是不能與用戶(hù)交互的。

preDesignReport(rpFileName:String)方法:

function TForm1.preDesignReport(rpFileName:String):boolean;

var   //其他變量

 

        dtfFileName:String;

begin

        ……

dtfFileName:=StringReplace(rpFileName, ExtractFileExt(rpFileName),'.dtf',

[rfReplaceAll, rfIgnoreCase]);

        try

rpAdoquery.SQL.Add('…');

                rpAdoquery.open;//打開(kāi)報(bào)表的數(shù)據(jù)環(huán)境

                rpAdoquery.FieldList.SaveToFile(dtfFileName);

                result:=true;

        except

            on Exception do

                result:=false;

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多