Jaspersoft Studio報表設計


1      開發工具

1.1  軟件名稱

名稱:TIBCO Jaspersoft Studio

版本:6.0或以上,建議6.2.1

1.2  軟件安裝

免安裝軟件包,拷貝即可使用,建議放在D:盤或其它自己好找的目錄。

拷貝好軟件后,可為主程序創建一個快捷方式:

1.3  TIBCO Jaspersoft Studio界面說明

安裝好后打開主界面,關掉歡迎頁面,即可出現開發主界面,如下:

打開或設計報表時,為如下界面:

2      報表設計

2.1  工作空間設置

打開主菜單“File —> Switch WorkSpace”,選擇你打算存放報表工程及報表設計文件的目錄。

點擊OK后,程序將自動關閉並重新啟動。如果沒有重啟,請手工重新打開。

2.2  報表工程目錄結構說明

重新打開界面后,系統會自動創建一個默認的報表工程:

此時,在你工作空間所在目錄會生成如下文件夾:

在MyReports目錄里創建3個目錄:

l  JSON:用於后期存放在設計報表格式時用到的樣例數據文件

l  DataAdapter:用於存放設計報表需要定義的數據源

l  Print:報表設計文件(*.jrxml)及編譯好的報表格式文件(*.jasper)

 

2.3  生成JSON數據文件

l  用瀏覽器打開猿猿企業管理系統(這里以谷歌瀏覽器為例進行說明),登錄后打開需要設計打印格式的功能界面(如采購訂單),打開(或新建)一張有多行商品數據的單據。

l  按下F12,打開調試界面,在單號位置輸入單號回車,如下圖。

按圖中的步驟,找到JSON數據,並將其全部復制出來(也許是第一個action,也可能是最后一個,更有可能是幾個合起來(,"SER_FWDFASP":[{"YH)。

l  可在瀏覽器中打開JSON解析工具對JSON字符串進行格式化。解析工具地址:http://www.bejson.com/jsonview2

l  將剛才格式化好的JSON字符串復制粘貼到新建的文件中,並進行編輯:

n  將前5(7)行替換為【{"PUR_CGDD":】

n  后4行替換為 【}】

n  替換完畢后,能在試圖中看到以下結構則表示格式正確,可以繼續后續操作:

 

n  

l  切換到報表設計工具,在報表工程的JSON目錄創建一個JSON文件:
在JSON目錄點鼠標右鍵àNew/Fileà輸入文件名PUR_CGDD1.json-->Finish

l  將剛才編輯好的JSON字符串全選,拷貝到新文件中。

l  樣例數據到此准備就緒。

2.4  創建數據源(Data Adapter)

在工程的DataAdapter目錄點右鍵àNewàData Adapter,打開如下界面:

點Next:

選擇JSON File,點Next:

輸入數據源名稱;

File/Url位置選中剛才建好的json文件名;

選擇Use the report JSON expression when filling the report。

點擊Finish。

測試一下,成功則進入下一步。

2.5  創建主報表

在Print目錄(或其子目錄)點右鍵àNew/Jasper Report,打開如下界面:

Next:

輸入打印報表名稱PUR_CGDD1.jrxml,Next:

選擇剛才建好的數據源,在下面的列表里選中主節點“PUR_CGDD”,Next

可用字段全選,Finish。(主報表不需要設置分組字段Group by)

界面上出現了一個待設計的空打印模版。

上面有若干個欄位,刪除其他欄位,保留Page Header、Detail 1、Page footer,並適當拉寬3者的高度,以方便放置內容。

2.6  設置打印紙張

在下圖方框區域點右鍵àPage Format…,調出紙張設置對話框:

按紙張實際大小進行設置,注意將所有單位設置成mm(毫米)。

2.7  放置打印內容

2.7.1  靜態文本

在右上方組件區域找到【Static Text】,鼠標選中后,在頁面空白處點擊一下或者拖放到頁面,即可增加一個靜態文本組件。

雙擊該組件可對需要顯示的文本內容進行編輯。通過工具欄的相關按鈕可對字體、文本對齊方式、組件對齊方式進行調整。

2.7.2  單據字段

在屏幕左下方的組件列表中找到Fields列表,將需要的字段拖放到報表上。當拖放到Detail 1區域時,系統會生成一個靜態標簽和一個字段值標簽,拖放到其他位置時只有字段值標簽。

將組件進行相應編輯,並拖放到PageHeader的相應區域。

繼續添加完其它字段內容,預覽如下:

2.7.3  條碼

條碼在拖放到報表上時,會要求選擇條碼格式,請按公司掃碼設備要求進行選定。選定后,在右下方的組件屬性欄選擇“AdvancedàCode Expression”,彈框選擇對應的字段即可。

2.7.4  合計字段配置 ?

在界面右下方的報表元素列表Variables欄增加一個Variable;

在右邊的屬性中做如下設置:

報表元素

 

取值必須修改為Double類型,不然無法相加數據,Double才正常

最后把這個Variable拖拽到ColumnFooter區域。

2.7.5  數量金額格式設置

選中相應的數量、金額字段后,在屬性頁面找到屬性”TextField Properties/Pattern”,點后面的按鈕調出格式設置對話框進行設置即可。

2.8  創建子報表(多個query.action時,子表需關聯新的json)

在右上方將Subreport拖入Detail 1,彈出如下界面:

選擇Create anew report,Next,默認紙張,輸入子報表的文件名:

       然后選擇數據源:

      

       Next,與主報表一樣選擇所有字段,再Next,選擇Group by 字段(CKKQID):(只有需要按某字段分組時才選此項,否則直接Next)

      

Next,選擇子報表獲取數據表達式:

按下列表達式填入文本框,其中最后的雙引號中是子表對應的JSON節點名稱。(填入軟件)-改expression為主目錄"PUR_CGDDMX.J"

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

點擊Finish,生成子報表,子報表只保留“Column Header、Detail 1、Column Fooder”三個區域。

然后將商品明細需要展示的字段拖到Detail 1區域,並排版。

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

CRM_VIPCLXX取值另外一個aciton的CRM_VIPCLXX

跨表取值必須建立子報表

subDataSource取值

 

 

2.9  分組設置

首先,在子報表創建時,在Group by頁面選擇要分組的字段(采購訂單上為:CKKQID);

在子報表設計頁面左下方的CKKQID Group Header,點右鍵Add Header Band;

將CKKQID、CKKQMC等字段配置到新增加的Group Header Band區域。

 

所有設置完畢后,預覽效果,如下:

       分組增加代碼:1、  <sortFieldname="FABHMC" order="Descending"/>

       (order=“Descending”表示倒序排列)

        2、分組重新開頁

2、<groupname="FABHMC"isStartNewPage="true">

        <groupExpression><![CDATA[$F{FABHMC}]]></groupExpression>

    </group>

3、合計按分組打印

3      報表文件的配置與發布

l  報表文件設計好后,經過編譯(BuildALL),可在報表目錄生成*.jsper文件。

l  將兩個*.jsper文件拷貝出來,放在Tomcat/bin/resources/print目錄下與該功能界面jsp相同的子目錄中。

l  並在界面配置表中按鈕定義表里打印按鈕的AURL字段設置為對應的主報表文件名稱。

l  報表格式即發布成功。

 

編輯窗口:

 

1、  顯示不了中文:

Ⅰ編碼轉換

Source添加如下內容:

    <propertyname="com.jaspersoft.studio.data.defaultdataadapter"value="OneEmpty Record"/>

    <propertyname="com.jaspersoft.studio.unit."value="mm"/>

    <propertyname="com.jaspersoft.studio.unit.pageHeight"value="mm"/>

    <propertyname="com.jaspersoft.studio.unit.pageWidth"value="mm"/>

    <propertyname="com.jaspersoft.studio.unit.topMargin"value="mm"/>

    <propertyname="com.jaspersoft.studio.unit.bottomMargin"value="mm"/>

    <propertyname="com.jaspersoft.studio.unit.leftMargin"value="mm"/>

    <propertyname="com.jaspersoft.studio.unit.rightMargin"value="mm"/>

    <propertyname="com.jaspersoft.studio.unit.columnWidth"value="mm"/>

    <propertyname="com.jaspersoft.studio.unit.columnSpacing"value="mm"/>

    <stylename="myStyle"isDefault="true"pdfFontName="STSong-Light"pdfEncoding="UniGB-UCS2-H"isPdfEmbedded="true"/>

 

II時間格式轉換:newSimpleDateFormat("yyyy-MM-dd HH : mm : ss").format(newjava.util.Date(Long.parseLong($F{SHRQ_SJ})))

 

 

III空值改成不顯示

 

IX打印分組:

1、  對BXBJ進行分組

2、  將BXBJ字段復制到新增分組

X.將數字進行文字判斷轉換(待研究):

IF ($F{BXBJ}=="0","選修","必修")

XI.將分頁改為按分組計算:

4      問題總結

4.1  日期顯示問題

描述1:jaspersoft 上顯示的是日期時間,在網頁上為秒數

         解決:網頁json轉jaspersoft時會成為日期時間的,所以要加上日期函數

        

         描述2:有日期函數的可以為空。

         解決:運用三元運算符做判斷,jaspersoft不能用if…else;有日期函數時,為空會報錯。

 $F{YQJCSJ}.equals("0")?"無":newSimpleDateFormat("yyyy-MM-dd").format(new java.util.Date(Long.parseLong($F{YQJCSJ})))

         描述3:在網頁json上加上了相應的字段,但是在網頁上還是顯示不出來。

         解決:單單在網頁json上添加是不能顯示的,還需在數據庫相應的表上添加相應的字段;

4.2  其它

用double和INT剛好取值0有問題

用java.math.BigDecimal這個方法避免

 

4.3  模板三目運算判斷

連續的三目判斷:

表達式:

($F{ZCZT}.equals("1")) ? "在庫" : (($F{ZCZT}.equals("2"))? "在用" : (($F{ZCZT}.equals("3"))? "閑置" : (($F{ZCZT}.equals("4"))? "維修" : (($F{ZCZT}.equals("5"))? "借出" : (($F{ZCZT}.equals("6"))? "報廢" : (($F{ZCZT}.equals("7"))? "調撥售出" : (($F{ZCZT}.equals("8"))? "盤虧待處理" : ($F{ZCZT}.equals("9"))? "盤虧" : "Cancelled")))))))

如:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM