更新時(shí)間:2021-09-29 09:13:14 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1329次
在Java開(kāi)發(fā)工具當(dāng)中,有一種是報(bào)告工具,當(dāng)我們談?wù)搱?bào)表工具時(shí),很多軟件都涵蓋了這個(gè)領(lǐng)域。但是,它們中的大多數(shù)是成熟的商業(yè)智能平臺(tái)或云服務(wù)。
但是,如果我們只想將一些報(bào)告功能作為庫(kù)添加到我們的應(yīng)用程序中,會(huì)發(fā)生什么?我們將在這里回顧一些非常適合此目的的Java報(bào)表工具。
通過(guò)本節(jié),我們將回顧如何直觀地設(shè)計(jì)報(bào)告和處理我們的數(shù)據(jù)。請(qǐng)注意,我們將在本部分中僅提及開(kāi)源工具。
(1)可視化編輯器
所有這三個(gè)工具都包括一個(gè)具有報(bào)表預(yù)覽功能的 WYSIWIG 編輯器。
BIRT Report Designer和Jaspersoft Studio是構(gòu)建在Eclipse RCP上的工具。對(duì)于我們大多數(shù) Java 開(kāi)發(fā)人員來(lái)說(shuō),這是一個(gè)很好的觀點(diǎn),因?yàn)槲覀兛赡苁煜?Eclipse 環(huán)境。與那些不同的是,Pentaho 報(bào)表設(shè)計(jì)器在視覺(jué)上很差。
此外,還有一個(gè)關(guān)于Jaspersoft Studio 的有趣功能:我們可以直接在他們的Jasper Reports Server(報(bào)告管理系統(tǒng))上發(fā)布我們的報(bào)告。
(2)數(shù)據(jù)集
與所有報(bào)表工具一樣,我們可以通過(guò)查詢數(shù)據(jù)源來(lái)檢索數(shù)據(jù)集(見(jiàn)下文)。然后,我們可以將它們轉(zhuǎn)換為報(bào)表字段、創(chuàng)建計(jì)算字段或使用聚合公式。
除此之外,比較我們?nèi)绾喂芾矶鄠€(gè)數(shù)據(jù)集很有趣,因?yàn)槿绻覀兊臄?shù)據(jù)來(lái)自不同的查詢甚至不同的數(shù)據(jù)源,我們可能需要其中的幾個(gè):
BIRT提供了最簡(jiǎn)單的解決方案,因?yàn)槲覀兛梢栽谕粋€(gè)報(bào)告中擁有多個(gè)數(shù)據(jù)集
使用Jasper Reports和Pentaho,我們每次都需要?jiǎng)?chuàng)建一個(gè)單獨(dú)的子報(bào)表,這可能非常棘手
(3)圖表和視覺(jué)元素
所有工具都提供簡(jiǎn)單的元素,如形狀和圖像,以及各種圖表風(fēng)格:線、區(qū)域、餅、雷達(dá)、環(huán)等。它們都支持交叉表。
但是,Jasper Reports提供了最豐富的視覺(jué)元素集合。它添加到上面的列表映射,迷你圖,金字塔,和甘特圖。
(4)造型報(bào)告
現(xiàn)在,讓我們比較一下頁(yè)面中元素的定位和大?。?/p>
所有工具都提供像素定位
BIRT和Pentaho還提供類似 HTML 的定位(表、塊、內(nèi)聯(lián))
它們都不支持類似 CSS 的 flexbox 或網(wǎng)格系統(tǒng)來(lái)控制元素大小
此外,當(dāng)我們必須管理多個(gè)報(bào)表時(shí),我們可能希望共享相同的視覺(jué)主題:
Jasper Reports提供帶有 XML-CSS 語(yǔ)法的主題文件
BIRT可以將 CSS 樣式表導(dǎo)入到設(shè)計(jì)系統(tǒng)中
使用Pentaho,我們只能在頁(yè)眉中添加 CSS 樣式表。所以很難將它們與內(nèi)部設(shè)計(jì)系統(tǒng)混合
現(xiàn)在,我們已經(jīng)了解了如何設(shè)計(jì)報(bào)告,讓我們比較一下如何以編程方式呈現(xiàn)它們。
(1)安裝
首先,讓我們注意到所有工具都被設(shè)計(jì)為可以輕松嵌入到 Java 項(xiàng)目中。
首先,您可以查看我們關(guān)于BIRT 和Jasper Reports 的專門(mén)文章。對(duì)于 Pentaho,有一個(gè)幫助頁(yè)面和免費(fèi)的代碼示例。
接下來(lái),對(duì)于這些工具中的每一個(gè),我們將報(bào)告引擎連接到我們的應(yīng)用程序數(shù)據(jù)。
(2)數(shù)據(jù)源
我們應(yīng)該問(wèn)的第一個(gè)問(wèn)題是:我們?nèi)绾螌?bào)表引擎連接到我們的項(xiàng)目數(shù)據(jù)源?
Jasper Reports:我們只需將其添加為fillReport方法的參數(shù)
BIRT解決方案有點(diǎn)復(fù)雜:我們應(yīng)該修改我們的報(bào)告以將數(shù)據(jù)源屬性設(shè)置為參數(shù)
Pentaho在這里有一個(gè)很大的缺點(diǎn):除非我們購(gòu)買(mǎi)他們的PDI商業(yè)軟件,否則我們必須使用 JNDI 數(shù)據(jù)源,這更難設(shè)置
說(shuō)到數(shù)據(jù)源,支持哪些類型?
所有三個(gè)工具都支持最常見(jiàn)的類型:JDBC、JNDI、POJOs、CSV、XML 和MongoDB
REST API是現(xiàn)代項(xiàng)目的必要條件,然而,它們都沒(méi)有原生支持它
使用BIRT,我們應(yīng)該編寫(xiě)一個(gè)Groovy 腳本
Jasper Reports需要一個(gè)額外的免費(fèi)插件
使用Pentaho,我們應(yīng)該編寫(xiě)Groovy 腳本或獲取PDI商業(yè)軟件
Jasper Reports和Pentaho本機(jī)支持 JSON 文件,但BIRT將需要外部 Java 解析器庫(kù)
我們可以在這個(gè)矩陣中找到完整的比較列表
(3)參數(shù)和運(yùn)行時(shí)自定義
由于我們已將報(bào)表連接到我們的數(shù)據(jù)源,讓我們呈現(xiàn)一些數(shù)據(jù)!
現(xiàn)在重要的是如何檢索我們的最終用戶數(shù)據(jù)。為此,我們可以將參數(shù)傳遞給渲染方法。這些參數(shù)應(yīng)該在我們?cè)O(shè)計(jì)報(bào)告時(shí)定義,而不是在運(yùn)行時(shí)定義。但是,例如,如果我們的數(shù)據(jù)集基于最終用戶上下文的不同查詢,我們?cè)撛趺崔k?
使用Pentaho和Jasper Reports,這是不可能做到的,因?yàn)閳?bào)告文件是二進(jìn)制的,并且沒(méi)有 Java SDK 來(lái)修改它們。相比之下,BIRT報(bào)告是純 XML 文件。此外,我們可以使用 Java API 來(lái)修改它們,因此在運(yùn)行時(shí)自定義所有內(nèi)容非常容易。
(4)輸出格式和 Javascript 客戶端
值得慶幸的是,所有工具都支持大多數(shù)常見(jiàn)格式:HTML、PDF、Excel、CSV、純文本和RTF。如今,我們可能還會(huì)問(wèn),如何將報(bào)告結(jié)果直接集成到我們的網(wǎng)頁(yè)中。不過(guò),我們不會(huì)提及粗略地包含 PDF 可視化工具。
最好的解決方案是使用Javascript客戶端將報(bào)告直接呈現(xiàn)到 HTML 元素中。對(duì)于BIRT,Javascript 客戶端是 Actuate JSAPI ,對(duì)于Jasper Reports,我們應(yīng)該使用JRIO.js
Pentaho除了 iFrame 集成之外不提供任何東西。此解決方案有效,但可能存在嚴(yán)重缺陷
(5)獨(dú)立渲染工具
除了將我們的報(bào)告集成到網(wǎng)頁(yè)中之外,我們可能還對(duì)開(kāi)箱即用的渲染服務(wù)器感興趣。每個(gè)工具都提供了自己的解決方案:
BIRT Viewer 是一個(gè)輕量級(jí)的 Web 應(yīng)用程序示例,用于按需執(zhí)行BIRT報(bào)告。它是開(kāi)源的,但不包括報(bào)告管理功能
對(duì)于Pentaho和Jasper Report,只有商業(yè)軟件包
首先,談?wù)勗S可證。BIRT在EPL下,Jasper Reports在LGPLv3下,Pentaho在LGPLv2.1下。因此,我們可以將所有這些庫(kù)嵌入到我們自己的產(chǎn)品中,即使它們是商業(yè)產(chǎn)品。
然后,我們可以問(wèn)問(wèn)自己,這些開(kāi)源項(xiàng)目是如何維護(hù)的,社區(qū)是否仍然活躍:
Jasper Reports有一個(gè)維護(hù)良好的存儲(chǔ)庫(kù),其編輯器 TIBCO Software 具有穩(wěn)定的中等活動(dòng)
BIRT 存儲(chǔ)庫(kù)仍在維護(hù),但自 2015 年 OpenText 收購(gòu)其編輯器 Actuate 以來(lái),其活動(dòng)非常低
同樣,自 2015 年 Hitachi-Vantara 收購(gòu)以來(lái),Pentaho存儲(chǔ)庫(kù) 活動(dòng)非常低
我們可以使用 Stackoverflow 趨勢(shì)來(lái)確認(rèn)這一點(diǎn)。BIRT和Pentaho 的受歡迎程度最低,但Jasper Reports 的受歡迎程度中等。
盡管目前保持穩(wěn)定,但在過(guò)去 5 年中,所有三種Java 報(bào)告工具的受歡迎程度都有所下降。我們可以通過(guò)云和 Javascript 產(chǎn)品的出現(xiàn)來(lái)解釋這一點(diǎn)。
除了開(kāi)源解決方案,還有一些值得一提的商業(yè)選項(xiàng)。
(1)精細(xì)報(bào)告
Fine Report最初設(shè)計(jì)為作為獨(dú)立服務(wù)器執(zhí)行。幸運(yùn)的是,如果我們想使用它,我們可以將它作為我們項(xiàng)目的一部分。我們必須手動(dòng)將所有 JAR 和資源復(fù)制到我們的 WAR 中,如他們的過(guò)程中所述。
執(zhí)行此操作后,我們可以在我們的項(xiàng)目中看到作為 URL 提供的決策平臺(tái)工具。通過(guò)此 URL,我們可以直接在提供的 Web 視圖、iFrame或使用其 Javascript 客戶端中執(zhí)行報(bào)告。但是,我們無(wú)法以編程方式生成報(bào)告。
另一個(gè)巨大的限制是目標(biāo)運(yùn)行時(shí)。版本 10僅支持 Java 8 和 Tomcat 8.x。
(2)Logi 報(bào)告(以前的 JReport)
與 Fine Report 一樣,Logi Report 被設(shè)計(jì)為作為獨(dú)立服務(wù)器執(zhí)行,但我們可以將其集成為現(xiàn)有 WAR 項(xiàng)目的一部分。因此,我們將面臨與Fine Report相同的限制:我們無(wú)法以編程方式生成報(bào)告。
與 Fine Report 不同。然而,Logi Report 支持幾乎所有的 servlet 容器和 Java 8 到 13。
(3)ReportMill 報(bào)告
最后, ReportMill 值得一提,因?yàn)槲覀兛梢詫⑺樌厍度氲矫總€(gè) Java 應(yīng)用程序中。此外,與 BIRT 一樣,它非常靈活:我們可以在運(yùn)行時(shí)自定義報(bào)告,因?yàn)樗鼈兪羌?XML 文件。
但是,我們可以立即看到 ReportMill 已經(jīng)老化,并且與其他解決方案相比,它的功能也很差。
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)