亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        一個報表文檔雙向格式轉(zhuǎn)換組件

        2010-09-15 03:38:58袁冠遠(yuǎn)袁衛(wèi)華袁姝郭維琪
        武漢紡織大學(xué)學(xué)報 2010年2期
        關(guān)鍵詞:頁面

        袁冠遠(yuǎn),袁衛(wèi)華,袁姝,郭維琪*

        (1 廣州大學(xué) 華軟軟件學(xué)院,廣州 51000;2 武漢紡織大學(xué),武漢 430073;3 中國地質(zhì)大學(xué),武漢430074)

        一個報表文檔雙向格式轉(zhuǎn)換組件

        袁冠遠(yuǎn)1,袁衛(wèi)華2,袁姝3,郭維琪2*

        (1 廣州大學(xué) 華軟軟件學(xué)院,廣州 51000;2 武漢紡織大學(xué),武漢 430073;3 中國地質(zhì)大學(xué),武漢430074)

        在現(xiàn)代企業(yè)的信息管理中,報表作為一種重要的輸出載體,有著至關(guān)重要的作用。為了實現(xiàn)不同報表文檔格式的相互轉(zhuǎn)換,本文分析了Active Reports和StimulReports這兩種報表文檔的格式,給出了在兩者之間進(jìn)行格式轉(zhuǎn)換的原理和實現(xiàn)代碼。利用本組件在.NET 平臺下進(jìn)行系統(tǒng)開發(fā),可以增強(qiáng)報表系統(tǒng)的可移植性和可擴(kuò)充性。

        報表;格式轉(zhuǎn)換;組件

        在基于數(shù)據(jù)庫的信息系統(tǒng)中,信息的輸出反映了整個應(yīng)用系統(tǒng)的最終運(yùn)行結(jié)果,報表作為一種重要的輸出載體,在現(xiàn)代企業(yè)的信息管理中無疑起著至關(guān)重要的作用[1,2]。在微軟的 .Net 平臺下,可選的報表組件很多,老牌的有 Crystal Report、Active Reports,.Net 平臺下的新秀有 SQL Server Reporting Service、Stimul Reports、 Component One Reports、 Xtra Reports[3,4]。不同的報表組件所生成的最終文檔格式不一樣,對這些文檔格式進(jìn)行相互轉(zhuǎn)換,其意義不亞于在微軟的Word文檔與金山的WPS文檔之間進(jìn)行格式轉(zhuǎn)換[5]。

        1 原理

        當(dāng)前,各種報表組件都是按照模板-引擎-文檔的模式(如圖1)開發(fā)的[6-9]。報表設(shè)計人員使用設(shè)計器設(shè)計好報表模板,報表引擎根據(jù)報表模板和相關(guān)的數(shù)據(jù)生成最終文檔,最后,根據(jù)不同的需要,可以對最終文檔進(jìn)行不同的輸出,如打印,保存,導(dǎo)出為其它通用文檔格式。

        圖1 各種報表組件工作模式

        不同的報表組件由于其報表引擎不同,使用的報表模板不一樣,所生成的最終文檔格式就不一樣。而同一個企業(yè)甚至同一個信息系統(tǒng),根據(jù)不同的需求和報表組件的不同功能,可能會選用兩種或更多的報表組件,因此有必要對不同的報表組件生成的最終文檔進(jìn)行格式轉(zhuǎn)換。本文對兩種報表組件(Active Reports,StimulReports)所產(chǎn)生的最終文檔格式進(jìn)行分析,并開發(fā)了一個雙向文檔格式轉(zhuǎn)換組件(如圖2)。

        圖2 雙向格式轉(zhuǎn)換組件示意圖

        2 文檔格式分析

        2.1 StimulReports 文檔格式:

        StimulReports 產(chǎn)生的最終文檔,具有良好的文檔對象模型(Document Object Model, DOM)[10], 它包含文檔-頁面-組件這樣一個層次結(jié)構(gòu)。它的頂層對象是文檔(StiReports), 一個文檔包含所有生成的頁面(RenderedPages), 每個頁面(StiPage)則包含所有組成頁面的組件(Components),每個組件(StiComponent)表示一個頁面元素。有多種類型的組件,如文字(StiText)、圖片(StiImage)、條碼(StiBarCode)等(如圖3)。

        圖3 StimulReports 文檔結(jié)構(gòu)示意圖

        2.2 ActiveReports 文檔格式

        ActiveReports 產(chǎn)生的文檔,不是嚴(yán)格的DOM,而是DOM + 畫布(Canvas)模型。它的頂層對象是文檔(Document), 一個文檔包含所有生成的頁面(Pages), 每個頁面(Page)則是一個畫布。畫布提供了一個比較靈活的繪圖場所[11]。它提供了一系列的屬性(Property)來設(shè)置當(dāng)前的用于繪圖的特點,如ForeColor用于設(shè)置當(dāng)前的前景色,F(xiàn)ont 用于設(shè)置當(dāng)前的字體,等等;也提供了一系列的方法(Method)用于在畫布上繪圖,如DrawText 用于繪制文字,DrawImage 用于繪制圖片,等等。當(dāng)然,它也提供了一個很重要的屬性:CanvasItems,用于獲取當(dāng)前畫布中所有的繪制項目(CanvasItem)(如圖4)。

        圖4 ActiveReports 文檔格式示意圖

        3 雙向文檔格式轉(zhuǎn)換組件實現(xiàn)

        本雙向格式轉(zhuǎn)換組件由三個類組成:PageBuilder 類用于輔助構(gòu)造Active Reports 頁面;StiDocument2ARDocument 類用于將 StiReports 報表文檔格式轉(zhuǎn)換為 Active Reports 報表文檔格式;ARDocument2StiDocument 類用于將 Active Reports報表文檔格式轉(zhuǎn)換為 StiReports 報表文檔格式。

        3.1 PageBuilder 類

        鑒于 Active Reports 文檔并非完全 DOM ,為了方便地生成其文檔,而不是每次都采用畫布模型繪圖,這里特封裝了 PageBuilder 類,用于構(gòu)造頁面。這個類主要重載[12]了幾個 Add 方法,用于添加各種 Active Reports 模板對象(注意,雖然Active Reports生成的最終文檔不是完全DOM,但其報表模板是完全DOM。這里Add方法內(nèi)部將傳入的模板對象轉(zhuǎn)換為畫布中的屬性以及繪圖指令)。這里Add方法內(nèi)部將傳入的模板對象轉(zhuǎn)換為畫布中的屬性以及繪圖指令),如:

        在以上源代碼中, page 是 PageBuilder 類的成員變量,是一個 Page 類的對象,表示當(dāng)前的頁面。由此代碼也可以看出 Page 的Canvas 模式:先設(shè)置一系列的屬性值如 ForeColor, PenStyle, PenWidth, 再調(diào)用 DrawLine 方法來繪制線條。其它的 Add 重載函數(shù)代碼基本上也是這個思路。

        使用 Add 方法構(gòu)造完頁面之后,可以使用PageBuilder 類的 Page 屬性獲取生成的頁面。

        3.2 StiDocument2ARDocument 類

        有了 PageBuilder 類之后,可以著手實現(xiàn)StiDocument2ARDocument 類了。

        StiDocument2ARDocument 類提供了 Sti Document 屬性,用于設(shè)置待轉(zhuǎn)換的 StiReports 文檔對象; ARDocument 屬性,用于獲取轉(zhuǎn)換之后的Active Reports 文檔對象。同時,它封裝了 Convert方法,用于執(zhí)行轉(zhuǎn)換操作。

        Convert 函數(shù)的實現(xiàn)思想并不復(fù)雜,它首先創(chuàng)建了一個 Active Reports 的 Document 對象;然后遍歷 StiReports 文檔的每一頁,創(chuàng)建一個PageBuilder 對象,用于構(gòu)建 Active Reports 的Page;然后遍歷當(dāng)前 StiPage 中的每一個組件(StiComponent),根據(jù)當(dāng)前組件的類型,調(diào)用AddComponent函數(shù)的不同重載版本,將其轉(zhuǎn)換為Active Reports 對應(yīng)的組件,并調(diào)用 PageBuilder 的Add 方法,添加到當(dāng)前的頁面。

        Convert 方法的基本代碼如下:

        對于不同類型的 StiComponent ,需要實現(xiàn)不同的AddComponent 重載版本。 雖然從StiComponent 繼承以及間接繼承的派生類非常多,但是相當(dāng)一部分只是作為報表模板組件存在,在生成的最終文檔里,只包括有限幾種類型的組件。這些類型以及轉(zhuǎn)換后對應(yīng)ActiveReports 組件見表1。

        表1 StiReports 組件與 Active Reports 組件對照表

        因此我們只需要為這幾種類型的組件編寫AddComponent 重載函數(shù)即可。這里僅列出添加文本框組件的代碼,其它組件的代碼結(jié)構(gòu)基本相同:

        3.3 ARDocument2StiDocument 類

        ARDocument2StiDocument 類用于Active Reports 文檔到 StiReports 文檔的轉(zhuǎn)換。類似地,ARDocument2StiDocument 類提供了 ARDocument屬性,用于設(shè)置待轉(zhuǎn)換的 Active Reports 文檔對象;StiReports 屬性,用于獲取轉(zhuǎn)換之后的 StiReports文檔對象。Convert 方法,用于執(zhí)行轉(zhuǎn)換操作。

        Convert方法的實現(xiàn)思想與StiDocument2ARDocument 類 的 Convert 方法基本相似,但由于 ActiveReports 文檔不是完全的 DOM,所以代碼的實現(xiàn)上會有所不同。它首先創(chuàng)建了一個StiReports 對象;然后遍歷 Active Reports 文檔的每一頁,創(chuàng)建一個 StiPage 對象;然后通過當(dāng)前Active Reports頁(Page)的 CanvasItems 集合,遍歷每一個繪圖項目(CanvasItem),由于 CanvasItem 并非一個完整的頁面元素(文本、圖片等)。它有可能只是屬性設(shè)置指令,如設(shè)置當(dāng)前的前景色(ForeColr),背景色(BackColor),字體(SelectFont),等等;也有可能是繪圖指令,如輸出文字(TextOut),填充矩形(FillRect),繪制JPEG圖片(JPEGImage)等等。對于屬性設(shè)置指令,只能先暫存在環(huán)境變量中,以備遇到繪圖指令,生成對應(yīng)的 StiComponent 對象時使用:

        Convert 方法的基本代碼如下:

        在 Convert 方法中,轉(zhuǎn)換繪圖指令為相應(yīng)的組件(StiComponent),將當(dāng)前環(huán)境變量中的相關(guān)值作為組件的屬性,然后添加到轉(zhuǎn)換后頁面。這些工作是由AddTextControl、AddPictureControl、AddRoundRectControl、AddFillRectControl等函數(shù)來實現(xiàn)的。以下僅列出 AddTextControl 函數(shù)代碼:

        4 調(diào)用示例

        轉(zhuǎn)換組件的調(diào)用相當(dāng)方便。一般流程是,根據(jù)需要,先創(chuàng)建合適的轉(zhuǎn)換組件對象,然后加載待轉(zhuǎn)換的源文件,調(diào)用Convert方法,執(zhí)行轉(zhuǎn)換即可。以下代碼演示了將 StimulReports 文檔轉(zhuǎn)換為Active Reports 文檔。

        反向轉(zhuǎn)換的代碼類似,鑒于篇幅限制,在此不再提供。

        5 結(jié)論

        本組件采用 Visual Studio 2008, C# 語言開發(fā),StimulReports版本為 2008.2.300.0, Active Reports 版本為 5.2.1013.2, 已穩(wěn)定應(yīng)用于多個管理信息系統(tǒng)。本組件雖然只實現(xiàn)了 Active Reports 文檔與 StiReports 文檔的相互轉(zhuǎn)換,但它提供了一種思路,具有很強(qiáng)的通用性和實用性,可以輕松實現(xiàn)轉(zhuǎn)換其它報表組件生成的文檔。

        [1] Chee Hoong Leong,Sai Peck Lee. A customisable report generator component system[J]. Malaysian Journal of Computer Science, 2003, 16(1): 1-8.

        [2] Daniel K. C. Chan. A document-driven approach to database report generation[C]. DEXA Workshops, 1998.

        [3] Carl Ganz, Jr. Real world enterprise reports using VB6 and VB. NET[M]. Berkeley, CA: Apress, 2003.

        [4] Dariusz Król, Jacek Oleksy, Malgorzata Podyma, Bogdan Trawinski.The analysis of reporting tools for a cadastre information system[C]. Business Information Systems – BIS, 2006:150-163.

        [5] 項 伍,曹峰.文檔轉(zhuǎn)換工具的設(shè)計與實現(xiàn)[J]. 計算機(jī)工程, 2008, 34(21): 48-50.

        [6] Felipe I. Anfurrutia, Oscar Díaz, Salvador Trujillo. A product-line approach to database reporting[C]. Jornadas de Ingeniería del Software y Bases de Datos – JISBD, 2005.

        [7] Leong Chee Hoong , Lee Sai Peck. A Report Generator Component System using XML-driven, Component-based Development Approach[J]. Informing Science, 2003(6): 53-61.

        [8] 宋曉宇,劉蔚然,王永會.自定義報表系統(tǒng)的組件化開發(fā)[J]. 計算機(jī)與數(shù)字工程, 2008, 36(6): 82-84.

        [9] 李興勇, 袁兆山, 江正海. 復(fù)雜報表生成系統(tǒng)實現(xiàn)技術(shù)研究[J]. 計算機(jī)應(yīng)用, 2006, 27(7): 1821-1824.

        [10] 王海鳳, 薩智海. DOM技術(shù)在數(shù)據(jù)轉(zhuǎn)換中的應(yīng)用[J]. 內(nèi)蒙古工業(yè)大學(xué)學(xué)報, 2002, 27(4): 270-274.

        [11] 李濤. 基于Delphi 的精確定位套打設(shè)計與實現(xiàn)[J].計算機(jī)工程與設(shè)計, 2007, 28(15):3793-3796.

        [12] Andrew Troelsen.Pro C# 2008 and the .NET 3.5 Platform[M]. Berkeley, CA: Apress, 2007: 113.

        A Component for Mutual Format Converion between Report Files

        YUAN Guan-yuan1,YUAN Wei-hua2,YUAN Shu3,GUO Wei-qi2

        (1 South China Institute of Software Engineering of Guangzhou University, 510990 2 Wuhan University of Science and Engineering, 430073 3 China University of Geosciences, Wuhan, 430074)

        Report files have been playing a crucial role in information management of modern enterprises as an important means of output carrier. In order to implement interconversion between different report files, the paper analyzes two report document formats, namely, Active Reports and StimulReports, which present the principle and source code of conversion between the two reports. System developed under .NET Framework by using this component can strengthen the capacity of transplant and expansion of the reporting system.

        report files; format converion; component

        TP317.3

        B

        1009-5160(2010)02-0048-05

        *通訊作者:郭維琪(1954-),男,高工,研究方向:機(jī)電一體化.

        湖北省自然科學(xué)基金項目(2008CDZ058).

        猜你喜歡
        頁面
        微信群聊總是找不到,打開這個開關(guān)就好了
        大狗熊在睡覺
        刷新生活的頁面
        在本機(jī)中輕松完成常見PDF操作
        電腦愛好者(2022年3期)2022-05-30 10:48:04
        移動頁面設(shè)計:為老人做設(shè)計
        Web安全問答(3)
        同一Word文檔 縱橫頁面并存
        網(wǎng)站結(jié)構(gòu)在SEO中的研究與應(yīng)用
        幾種頁面置換算法的基本原理及實現(xiàn)方法
        淺析ASP.NET頁面導(dǎo)航技術(shù)
        999精品全免费观看视频| 国产电影无码午夜在线播放| 亚洲欧美综合区自拍另类| 国产精品嫩草影院AV| 中国精品久久久久国产| 白白色发布在线观看视频| 高清午夜福利电影在线| 男女一边摸一边做爽爽的免费阅读| 免费看国产成年无码av| 天天综合色中文字幕在线视频| 日韩精品成人区中文字幕| 国产性生大片免费观看性| 成人激情四射网| 久久精品国产亚洲av成人无人区| 色婷婷久久亚洲综合看片| 免费看黄a级毛片| 人妻少妇精品无码专区二| 黄色国产一区在线观看| 丰满少妇按摩被扣逼高潮| 亚洲精品无码久久久久牙蜜区| 久久久久久久98亚洲精品| 久久网站在线免费观看| 色爱情人网站| 日韩少妇激情一区二区| 97久久综合区小说区图片专区| 国产少妇高潮在线视频| av免费不卡国产观看| 在线播放国产一区二区三区| 亚洲国产成人aⅴ毛片大全| 日本免费观看视频一区二区| 久久久久亚洲av成人网人人网站| 日韩欧美中文字幕不卡| 国产一区二区一级黄色片| 国产成人精品优优av| 最近中文字幕在线mv视频在线| 91尤物在线看| 成人麻豆视频免费观看| 亚洲色在线v中文字幕| 国内视频偷拍一区,二区,三区| 国产亚洲精品一品二品| 日韩精品极品视频在线观看免费 |