国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Jaspersoft報(bào)表系統(tǒng)Crosstab動(dòng)態(tài)自適應(yīng)列寬解決方法

2018-01-04 10:59潘慶和
電腦知識(shí)與技術(shù) 2018年28期

潘慶和

摘要:Jaspersoft Studio是一款優(yōu)秀的可視化報(bào)表構(gòu)建系統(tǒng),提供了各種報(bào)表元素,可以很方便地設(shè)計(jì)出各類(lèi)企業(yè)所需的報(bào)表。Crosstab又稱(chēng)交叉報(bào)表,是一種常用的報(bào)表形式,但在Jaspersoft Studio中只能對(duì)Crosstab的列寬進(jìn)行靜態(tài)的屬性設(shè)置,導(dǎo)致展示時(shí)樣式不夠美觀和清晰。該文給出了一種通過(guò)編程方式動(dòng)態(tài)設(shè)定列寬的解決方案,可以有效地解決這個(gè)問(wèn)題,通過(guò)一個(gè)化肥生產(chǎn)系統(tǒng)的在線報(bào)表打印實(shí)例演示了該方案的使用效果。

關(guān)鍵詞:Jaspersoft Studio系統(tǒng);交叉報(bào)表;動(dòng)態(tài)列寬

中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2018)28-0260-02

A Method for Dynamically Setting Column Width of Crosstab in Jaspersoft Studio

PAN Qing-he

(School of Computer and Information Engineering, Harbin University of Commerce, Harbin 150028, China)

Abstract: Jaspersoft Studio is an excellent visual report building system that provides a variety of reporting elements that make it easy to design reports for all types of businesses. Crosstab is a commonly used report, but in Jaspersoft Studio the column width of Crosstab can only be set statically, which makes the presentation style not beautiful and unclear. This paper presents a solution to dynamically set the column width by programming, which can effectively solve this problem. The use of this method is demonstrated by an online report printing example of a fertilizer production system.

Key words:jaspersoft studio; crosstab; dynamic column width

1 背景

Jaspersoft Studio[1]是一款優(yōu)秀的報(bào)表設(shè)計(jì)工具,使用該工具可以通過(guò)可視化的方式快速設(shè)計(jì)出所需形式的報(bào)表。該工具提供了豐富的報(bào)表組件和屬性設(shè)置能力,生成的jrxml文件報(bào)表模板可配合各種Java Web框架使用,比如流行的Spring MVC[2],由服務(wù)端計(jì)算和提供數(shù)據(jù),再根據(jù)相應(yīng)的報(bào)表模板渲染和展示。但遇到較為復(fù)雜的業(yè)務(wù)需求時(shí),只通過(guò)靜態(tài)屬性設(shè)置方式設(shè)計(jì)報(bào)表的方式是難以滿足要求的。比如Crosstab這種常用的交叉報(bào)表,在有些場(chǎng)景下展示列的數(shù)量是變化的,使用靜態(tài)方式設(shè)置列寬時(shí),可能或者因?yàn)閷挾仍O(shè)置太大導(dǎo)致顯示內(nèi)容超出邊界,或者設(shè)置的太小導(dǎo)致顯示內(nèi)容擁擠在一起,設(shè)計(jì)出的報(bào)表既不美觀清晰,也不標(biāo)準(zhǔn),難以滿足企業(yè)的要求。針對(duì)這種情況,該文提出了一種Crosstab動(dòng)態(tài)自適應(yīng)列寬解決方法,并以實(shí)際設(shè)計(jì)的某化肥生產(chǎn)公司生產(chǎn)子系統(tǒng)的在線報(bào)表打印輸出功能為例,給出了使用的流程。

2 當(dāng)前存在問(wèn)題

目前基于Crosstab進(jìn)行設(shè)計(jì)時(shí),展示的列寬需要設(shè)為固定值,盡管在多數(shù)情況下能夠滿足要求,但在有些需求下則會(huì)出現(xiàn)問(wèn)題。比如在化肥生產(chǎn)原料統(tǒng)計(jì)表的Crosstab設(shè)計(jì)中,需要使用列來(lái)顯示車(chē)間已經(jīng)產(chǎn)出的化肥產(chǎn)品,每行表示某種原料在相應(yīng)產(chǎn)品中的用量,最右列對(duì)每種原料的投入量進(jìn)行累計(jì)。通過(guò)該表可以清楚地看出,一段時(shí)間內(nèi)總共生產(chǎn)了多少產(chǎn)品,總共使用了多少原料,每種產(chǎn)品使用的各原料數(shù)量等等。一般考察生產(chǎn)情況時(shí)需要按時(shí)間段來(lái)查詢,每個(gè)時(shí)間段內(nèi)的產(chǎn)品數(shù)量是不同的,而且時(shí)間段越大,可能生產(chǎn)的產(chǎn)品數(shù)就越多,所以報(bào)表中列的數(shù)量是可變的。但Jaspersoft Studio中對(duì)Crosstab的列寬度屬性設(shè)置是靜態(tài)的,為了處理列數(shù)變化的情況,需要根據(jù)經(jīng)驗(yàn)將列寬設(shè)定一個(gè)較為合適的數(shù)值,比如該文示例中所使用的30px的列寬,以適應(yīng)未來(lái)列數(shù)增多的情況。按此種方式設(shè)置列寬,在使用時(shí)報(bào)表輸出效果如下例所示。為了保護(hù)企業(yè)生產(chǎn)信息,截圖對(duì)品名和原料名都做了模糊處理。

比如查詢2017-11-01至2017-11-10這段時(shí)間的數(shù)據(jù),顯示效果如下圖1所示。這段時(shí)間只生產(chǎn)了一種產(chǎn)品;2017-11-01至2017-11-20為時(shí)間段再次查詢,可以看到生產(chǎn)了兩種產(chǎn)品,如圖2所示。

盡管能夠正確地展示產(chǎn)品信息,但可以看出作為企業(yè)報(bào)表,這種表格形式既不美觀,也不規(guī)范,右側(cè)有大量的空白空間,而且因?yàn)榱袑捁潭?,?dǎo)致品名較長(zhǎng)時(shí),單元格的高度被拉高。因此,能否以自適應(yīng)地方式,根據(jù)產(chǎn)品數(shù)量自適應(yīng)地動(dòng)態(tài)設(shè)置Crosstab的列寬,是一個(gè)值得研究的問(wèn)題。當(dāng)前研究的情況是:1)使用Jaspersoft Studio是難以做到動(dòng)態(tài)設(shè)置列寬的。Jaspersoft Studio進(jìn)行Crosstab屬性設(shè)定后,會(huì)生成jrxml文件,因?yàn)閖rxml就是普通的xml文該文件,在渲染報(bào)表時(shí)只能按照文件既定格式展示內(nèi)容;2)使用Jaspersoft提供的類(lèi)方法去實(shí)現(xiàn)。這需要較為繁瑣的編程,需要對(duì)Jaspersoft所封裝的報(bào)表和組件類(lèi)及其包含的方法十分熟悉。針對(duì)這種情況,該文提供了一種簡(jiǎn)單方式:先使用Jaspersoft Studio進(jìn)行Crosstab的屬性設(shè)置,生成模板形式的jrxml文件,然后在渲染生成報(bào)表前,通過(guò)分析jrxml文件,利用Java[3]編程的方式對(duì)關(guān)鍵的列寬字段進(jìn)行匹配和替換,生成新的jrxml文件,最后對(duì)新的文件渲染和展示。這種方式在保持Jaspersoft Studio高效設(shè)計(jì)的同時(shí),只使用了簡(jiǎn)單的字符串替換方式就實(shí)現(xiàn)了自適應(yīng)動(dòng)態(tài)列寬設(shè)置這個(gè)問(wèn)題。下面給出具體的實(shí)現(xiàn)方案。

3 解決方案

3.1 方案流程圖

在Crosstab生成的jrxml文件中可以找到列寬度相應(yīng)的屬性,如下圖3中的width=“30”,這是在Jaspersoft Studio中設(shè)定的靜態(tài)值,當(dāng)前jrxml文件中的其他列寬也都是這個(gè)固定值。為了按照動(dòng)態(tài)列寬的方式設(shè)定,可以在渲染之前,使用后臺(tái)提供的具體數(shù)據(jù)動(dòng)態(tài)地計(jì)算列寬值,重新生成該文件,再進(jìn)行渲染和展示。流程圖如圖4所示。

3.2 流程實(shí)現(xiàn)代碼

下圖5是完成上述流程的代碼,其中注釋中的序號(hào)對(duì)應(yīng)流程圖中的序號(hào)。整型量columnCnt表示當(dāng)前報(bào)表的列數(shù),由服務(wù)器返回。其中數(shù)字“780”是根據(jù)顯示器的寬度設(shè)置的,可根據(jù)實(shí)際情況調(diào)整。

4 運(yùn)行實(shí)例

針對(duì)圖1和圖2中的情況,實(shí)施動(dòng)態(tài)列寬設(shè)定方法后,展示的效果分別如圖6和圖7所示。

可以看出,報(bào)表的整體寬度固定,且根據(jù)所顯示的列數(shù),各列寬都進(jìn)行了動(dòng)態(tài)地自適應(yīng)調(diào)整。這樣更為標(biāo)準(zhǔn)和美觀,實(shí)際使用中滿足了企業(yè)的需求。下圖8給出了2017-11-01至2018-02-20時(shí)間段內(nèi)的產(chǎn)品生產(chǎn)情況,為包含了11種產(chǎn)品的交叉報(bào)表,可見(jiàn)對(duì)于更多的列該方法也可滿足要求。

5 結(jié)束語(yǔ)

該文設(shè)計(jì)了一種Crosstab動(dòng)態(tài)列寬解決方法,并在實(shí)際應(yīng)用中取得了較好的效果。該方法簡(jiǎn)單易行,可為使用Jaspersoft Studio設(shè)計(jì)報(bào)表的程序員提供參考。目前列數(shù)動(dòng)態(tài)調(diào)整時(shí)產(chǎn)品名和原料名的字號(hào)沒(méi)有改變,下一步考慮將字號(hào)的大小也設(shè)為動(dòng)態(tài)調(diào)整,達(dá)到更好的顯示效果。

參考文獻(xiàn):

[1] TIBCO Software Inc. TIBCO Jaspersoft Studio User Guide [EB/OL]. https://community.jaspersoft.com/documentation/v710/tibco-jaspersoft-studio-user-guide.

[2] Amuthan Ganeshan. Spring MVC Beginners Guide[M]. USA: Packt Publishing, 2016: 9-35.

[3] Benjamin J. Evans and David Flanagan. Java in a Nutshell[M]. USA: OReilly Media, Inc, 2015: 289-304.

【通聯(lián)編輯:謝媛媛】

石屏县| 大石桥市| 黄平县| 金堂县| 新蔡县| 车险| 荆门市| 策勒县| 上虞市| 平武县| 伊通| 白城市| 内黄县| 大邑县| 左贡县| 思南县| 曲靖市| 普格县| 布拖县| 巫溪县| 乐昌市| 越西县| 方城县| 铜陵市| 海门市| 乐都县| 新田县| 德安县| 陇西县| 岱山县| 定结县| 常山县| 凤冈县| 扎兰屯市| 乌恰县| 镇江市| 东阿县| 凯里市| 化隆| 云南省| 张家港市|