JasperReport JSON datasource 快速上車

JasperReport庫是世界上最流行的開源報(bào)告引擎。它完全用Java編寫,可以使用任何數(shù)據(jù)源的數(shù)據(jù)生成像素級(jí)的完美文檔。然后,可以以各種格式(包括HTML、PDF、Excel、OpenOffice和Word)查看、打印或?qū)С鲞@些文檔。

關(guān)于Jaspersoft Studio的安裝可以參考我們一位同事的文章JasperReport 中踩過的坑
以及官方文檔,安裝社區(qū)版即可。
Jasper的頁面設(shè)計(jì)分為9個(gè)Bands。關(guān)于Bands的基本介紹請(qǐng)閱讀官方文檔:Understanding Bands
。
本文主要記錄下我們使用JSON格式的數(shù)據(jù)創(chuàng)建JasperRepor時(shí)遇到的一些坑和經(jīng)驗(yàn)。


json data adapter

創(chuàng)建jasper report時(shí)需要選擇data source



可選的數(shù)據(jù)鏈接有csv文件,jdbc連接,java beans,json等等



json數(shù)據(jù)方便前端開發(fā)快速開始,官方文檔中又無詳細(xì)介紹,因此本文以json為例,創(chuàng)建一個(gè)jasper report.

數(shù)據(jù): valuation-list-data.json

{
    "valuationOrder": {
        "company": {
            "nameCN": "珠海仁孚南星",
            "nameSuffix": "汽車銷售服務(wù)有限公司",
            "nameEn": "Zhuhai Zungfu NanXing Co.,Ltd",
            "address": "珠海市香洲區(qū)南屏科技園西路1號(hào)華科汽車城內(nèi)",
            "postCode": "519000",
            "phone": "+86-756-8520011",
            "fax": "+86-756-8520011"
        },
        "customer": {
            "name": "王圓圓",
            "gender": "女士"
        },
        "id": "39524395243952",
        "operator": "parts manager",
        "printDatetime": "2010/04/11 14:09:45",
        "totalPrice": 1111111111165.69,
        "lineItems": [
            {
                "id": "2",
                "stock": "y",
                "name": "2010087/氣缸蓋密封",
                "identify": "原廠G",
                "quantity": 1.00,
                "unitPrice": 70.00,
                "discount": 0.71556,
                "salePrice": 9999999.99
            }
         ]
}
  • 新建一個(gè)jasper report文件,data source 這里選擇 new,再選擇json文件。

  • 點(diǎn)擊 next 后,填寫data adapter名字,選擇導(dǎo)入json文件,并選擇Use the report JSON expression when filling the report選項(xiàng)。
  • 點(diǎn)擊 finish 后雙擊 valuationOrder,query valuationOrder.
  • 點(diǎn)擊next選擇需要的fields


  • 點(diǎn)擊next,按需求選擇以哪些fields進(jìn)行分組。最后選擇next -> finish.

    創(chuàng)建好jasper report后可以直接將field拖拽至需要的位置,也可以添加Text Filed后雙擊,選擇要展示的數(shù)據(jù)。


    點(diǎn)擊preview可進(jìn)行預(yù)覽

    注意到,valuationOrder中的customercompany都是對(duì)象,要展示其中的字段時(shí),直接創(chuàng)建field,輸入要?jiǎng)?chuàng)建的field的名字和class即可。

elements

jaspersoft studion提供了一些常用的elements,如可插入變量的text field和靜態(tài)文本static filed. image, line, list, chart, tabl, page number等等。frame類似div,可將elements在bands內(nèi)分組。



我們可以在三種模式下操作元素:

design

design模式下可以直接拖拽元素進(jìn)行設(shè)計(jì)布局,在右下角可以對(duì)元素進(jìn)行定位,設(shè)置大小,顏色,border, padding等操作。


source

source模式下可以利用代碼編輯、更改元素。


design

design模式預(yù)覽report,查看元素渲染。

text field

當(dāng)變量的長度未知時(shí),勾選上stretch with overflow選項(xiàng), text filed的高度會(huì)隨文本的長度而相應(yīng)增高。


當(dāng)需要在一個(gè)text filed內(nèi)對(duì)文本使用不用的樣式時(shí),可以將style標(biāo)簽
寫進(jìn)text field,如:

<textField>
    <reportElement x="314" y="133" width="100" height="30" uuid="f1bebe59-b953-4449-bdde-6bbc70fc89d1"/>
    <textFieldExpression><![CDATA["<style size='14' >" + $F{customer.name} + "</style>  <style size='10' >" + $F{customer.gender} + "</style>"]]></textFieldExpression>
</textField>

對(duì)customer.namecustomer.gender采用不同的字號(hào)。
此時(shí),text field的Markup需為styled.

customer font

當(dāng)我們要引入jaspersoft studio未提供的字體時(shí),可以通過如下步驟實(shí)現(xiàn):
Jaspersoft Studio -> Preferences -> Jaspersoft Studio -> fonts,選擇要導(dǎo)入的字體的路徑


添加成功后apply,導(dǎo)入的字體即可使用。
注意導(dǎo)入的customer字體位于font下拉列表的最前面!

當(dāng)我們要將jasper reposrt導(dǎo)出為pdf時(shí),可能會(huì)出現(xiàn)customer font導(dǎo)致的錯(cuò)誤,因?yàn)閜df格式有自己的font set。將customer font添加至pdf font,可解決此問題。

  • fonts設(shè)置中選擇導(dǎo)入的的font,點(diǎn)擊edit

  • 將字體嵌入到pdf中


  • 在report目錄中引入自添加的字體

    • 導(dǎo)出字體(如果已有字體壓縮包,可跳過此步)
      fonts中選中字體,點(diǎn)擊export,導(dǎo)出字體

    • 引入字體
      右鍵report所在目錄,選擇 properties


      選擇Java Build Path -> Libraries -> Add external JARs...,讀取字體壓縮包。
      點(diǎn)擊apply,即可引入字體。

table

對(duì)于valuationOrder.lineItems這類的數(shù)組數(shù)據(jù),常見的需求是通過table來展示。
我們可以使用 columnHeader, detail, columnFooter等bands組合創(chuàng)建table,eg: create a new report,也可以使用jaspersoft studio提供的table元素。
以下為table元素的添加步驟:

  • 選擇、添加table


  • table元素需要dataset(可以創(chuàng)建新dataset或者使用已存在的dataset)


  • 創(chuàng)建dataset,步驟和創(chuàng)建data adapter類似





    選擇lineItems

    選擇dataset的fields

    選擇dataset分組的fields

  • 選擇table的dataset的連接。
    因?yàn)槲覀兊臄?shù)據(jù)是json格式,因此選擇Use a JRDatasource express, 填入

((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("lineItems")

其中lineItems為json中數(shù)組的key,與dataset的名字無關(guān)。

  • 選擇需要在table中要展示的columns


  • 選擇布局
    layout中可以選擇是否需要table header、table footer、column header、column footer、group header和group footer;設(shè)置table中單元格的顏色和border.

    點(diǎn)擊finish,完成table的添加。當(dāng)table的dataset數(shù)據(jù)很多時(shí),table會(huì)自動(dòng)分頁。下圖分別為分頁后的table的第一頁和最后一頁:
    第一頁

    最后一頁

    可以看到,table header只在表格第一頁顯示,table footer只在表格最后一個(gè)顯示,column headercolumn footer在表格的每一頁顯示,column header為“表頭”。

為了使表格更美觀,我們需要給表格添加樣式。除了在創(chuàng)建table時(shí)的layout中可以添加樣式,還可以在design 模式下雙擊表格,進(jìn)入table,左下角可以看到table的結(jié)構(gòu),選擇table中的元素,編輯其樣式。


當(dāng)然也可以在source 中直接編輯table代碼。


參考鏈接

  1. http://www.itdecent.cn/p/b46b158a8289
  2. https://community.jaspersoft.com/documentation/tibco-jaspersoft-studio-user-guide/v630/creating-new-report#jss-user-basicreport_293982575_1024061
  3. https://community.jaspersoft.com/documentation/tibco-jaspersoft-studio-user-guide/v720/design-tab-3
  4. https://community.jaspersoft.com/documentation/tibco-jaspersoft-studio-user-guide/v720/working-font-extensions-0
  5. http://jasperreports.sourceforge.net/sample.reference/jsondatasource/index.html
  6. https://stackoverflow.com/questions/42821983/display-json-array-in-table-on-jasper-report
  7. https://stackoverflow.com/questions/42821983/display-json-array-in-table-on-jasper-report
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容