iReport 報表、子報表、主從報表、合計、例項解析

oufu發表於2015-11-10

開發使用步驟(iReport 4.1.1)


1.      開發使用步驟(iReport4.1)... 2

4.1.       JasperReport 和iReport的介紹... 2

4.1.1.        JasperReport 簡介... 3

4.1.2.        iReport 簡介... 3

4.1.2.1.     iReport幾個重要的概念... 3

4.1.2.2.     iReport資料庫連線的建立 DataSource. 5

4.2.       建立報表(以幾個不同型別的報表為例)... 7

4.2.1.        iReport基本報表(例:預交費用和押金報表)... 7

4.2.2.        iReport子報表SubReport(例:批量列印報表)... 13

4.2.3.        iReport table型別的表單(例:押金報表)... 21

4.2.4.        Dorado7中iReport的配置... 24

1.1.JasperReport 和iReport的介紹

網上有這個軟體的詳細介紹。可以搜尋下,進一步瞭解。這裡只是簡略介紹。     

4.1.1.      JasperReport 簡介

l  一個報表是由一個原始碼的檔案來描述,這個原始檔就是由DTD(jasperreport.dtd, version 0.6.3 is listed in Appendix B)來定義的XML標記。在0.5.3版本中它的原始檔副檔名變成了.jrxml; 取代了一般的.xml副檔名。報表的原始碼被編譯成jasper檔案(副檔名是.jasper)。

l  jasper檔案是一種預報表,嚴密的說就像是java的類被封狀成的物件。Jasper檔案通過你的應用程式來載入。它被新增一個資料來源的標記從而建立報表,接著它就能以你想要的格式輸出(例如:pdf或xls)。

4.1.2.      iReport 簡介

l iReport也是開源組織sf.net中的一款免費軟體,其主要作用是用來以視覺化的方式設計生成JasperReport 所使用的報表格式檔案,因為JasperReport 本身並未提供很好的視覺化報表設計工具,iReport 的出現正好彌補了這個缺陷。

l    現在的iReport 的最新版本是4.1.3

l iReport執行時需要sun java2 SDK 1.5及以上版本,為了能編譯我們的報表檔案我們需要完整的安裝JDK。

4.1.2.1.  iReport幾個重要的概念

報表的動態物件變數、引數、欄位

l 欄位(Fields):是資料庫抽取出來的,希望在報表中出現的資料庫內容。比如一個ID的所有值。$F{ filedsName }

l 引數(Parameters):這是你的應用需要提供給報表的入口,比如你希望在報表被解釋的時候提供Where語句的條件值,那麼就可以使用引數(Parameters)。$P{ parameterName }

l 變數(Variables):這是報表中一些邏輯運算的表現,比如統計值。$V{ variablesName }

報表結構

報表被垂直分成若干個部分,每一個部分我們叫它“band”。每一個band都有自己的特性,在報表生成的時候有些會列印一次,有些會列印多次。報表的結構大致是幾個部分:title、pageHeader、columnHeader、detial、columnFooter、pageFooter、summary、groupHeader、groupfooter。如下圖:

l  Title:title 段只在整個報表的第一頁的最上面部分顯示,除了第一頁,不管報表中有多少個頁面也不會再出現Title band 中的內容。就是報表的標題。

l  pageHeader:pageHeader 段中的內容將會在整個報表中的每一個頁面中都會出現,顯示的位置在頁面的上部。如果是報表的第一頁,pageHeader 中的內容將顯示在Title   Band 下面,除了第一頁以外的其他所有頁面中,pageHeader 中的內容將顯示在頁面的最上端,即頁首。報表的一些公共要素,比如頁碼、建立時間、建立人等資訊放置在這裡是比較好的選擇。

l  columnHeader:無可非議的這裡是放置列的名稱,記住不是列資料。

l  Detial:報表內容段,在這個Band 中設計報表中需要重複出現的內容,Detail 段中的內容每頁都會出現。比如銷售記錄資料。

l  columnFooter:放置列級別的統計計算值或是列的說明。

l  pageFooter:顯示在所在頁面的最下端,即頁尾。放置頁級別的統計值或是頁的說明。

 4.1.2.2 iReport資料庫連線的建立 DataSource

l 開啟iReport軟體後點選Report Datasources

l 點選new建立一個新的連線,選擇Datasource

l 填寫連線名稱選擇正確的驅動和URL等,點選測試。成功後儲存即可。

注:如果Driver為紅色則表示沒有這個驅動。需要新增相應的jar包。例如沒有ORACLE的驅動。新增jar包步驟

IReport中選單欄中“工具”—“選項”—“classpath”—“AddJar”,新增 Ojdbc.jar檔案。

 

 

1.1.建立報表(以幾個不同型別的報表為例)

利用iReport工具進行報表開發。以例項說明iReport的基本用法和小技巧。

1.1.      

1.1.1.      iReport基本報表(例:預交費用和押金報表)

1. 開啟iReport。檔案-à新建-à選擇BlankA4-àOpen this template

 

2. 為這個報表起名,並選擇儲存位置,點選下一步

3. 完成(新建空白報表完成)

4. 開始設計。

右鍵點選報表名稱,選擇 editorquery開啟report query 介面設計自己的sql語句(建議先寫一條引數固定的SQL),SQL設計好後會出現如下圖,右側的引數先不用管,點選OK按鈕儲存

5. 回到主介面,可以在左側Fields節點中看到SQL中查詢出來的所有欄位

6. 表單的設計。

根據需求設計報表,元件皮膚中有各種不同的控制元件(控制元件此處不介紹使用方法)可以根據自己的需要選擇,拖動左側的Fields中的欄位放到需要的位置,如圖

合計。

在左側Variables右擊新增欄位,在屬性中設定其屬性,Variable Class建議使用java.math.BigDecimal(可以保留小數),Calculation中是幾不同的函式,根據需要這裡選擇sum,在Variable Expression 中選擇需要求和的欄位,把Variables中的SUM欄位拖到表單中需要的位置就可以啦。

 

l 預覽以及引數的設計。

點選Preview預覽效果,如果沒有問題,開始設計引數,也就是調整SQL語句。

        

      引數:在主介面的Parameters中新增需要的引數,並在屬性中配置。然後儲存

l 調整SQL語句。

重新開啟iReport Query 介面,這時候你可以在右側看到自己設計的引數,拖動引數替換sql語句中之前固定的引數即可。這樣,當呼叫這個報表的時候,以同樣的引數名稱的引數傳給報表即可(前臺如何呼叫報表以及如何傳參在後面Dorado7中iReport的配置中說明)。

點選儲存後,檢視預覽這時候就會提示你輸入引數,輸入適合的參,報表設計完成

(注:這是一個簡單的報表製作。主要顯示iReport的基本功能,步驟相對詳細,下面的報表主要顯示一些技巧,重複的步驟不再截圖)

 

 

1.1.1.      iReport子報表SubReport(例:批量列印報表)

1. 首先設計出一個子報表(在主表中需要顯示的部分),同樣有引數的設定,設

計步驟如上。以批量列印為例,選擇一棟樓,將該樓中查出來的不同的客戶資訊作為引數傳給子表,批量列印客戶的繳費資訊。子表設計如圖:

2. 主表的設計。

在主表的Detail部分(根據情況而定)中加入SubReport控制元件來新增子報表。拖入時,選擇好本地已經存在的report(子表.jrxml原檔案)。

3. 點選下一步,到看到子表的引數的時候先不考慮點選下一步,點選完成,這時候你就可以看到下圖。子表已經和主表聯絡了起來。

點選下一步,完成。

 

4.主表與子表間的引數傳遞。

如:子表中定義了一個引數house2clientid。把主表中查詢出來的值賦給這個引數。在主表中點選新增的SubReport控制元件檢視屬性。在parameters中新增引數house2clientid並定義指定是主表中的哪個欄位。點選ValueExpression右側的編輯圖示,選擇值,確定。這樣主表選的那個欄位就作為引數傳給了子表。

 

 

技巧1:如何將子表中的合計傳遞給主表使用(子表向主表傳參)

1. 例:在子表中Variables中新增一個求某個欄位的合計的引數sum,屬性設定如圖:

2. 在主表中同樣新增名稱一模一樣的引數sum ,並且屬性的配置一樣

   

3. 在主表中選中新增的SubReport控制元件檢視屬性中最後一項Return Values,編輯calculation type中有不同的函式,這裡選擇Nothing(如果選中sum求和會自動計算每個子表表中合計的合計,也就是說會把傳過來的合計累加之前所有子表的合計)。點選確定,這樣就可以把在子表中的合計放在主表中顯示

 

技巧2:巧妙利用子報表設計表單

      形如:下面的表單,可以看的出來,是有幾個不同的表單組合而成,主要是各個表單的行數是不固定的,這就需要做成三個表單或者table組合起來。表單可以利用主子表的關係,例如第一個表單作為子表單放在表單二的columnHeader位置,而表單二Detail放表單二需要查詢的內容,同樣的把表單二作為子表放在表單三column Header位置,再把表單三作為子表放在主表的column Header位置這樣逐級往上走,可以設計出這樣的表單。當然各個報表的位置需要計算好。

引數:這個時候只要在SubReport中以主傳給子表的順序設計引數即可,如下圖是表單三向表單二傳。

以下是各個主子表的設計,需要注意的是他們位置的調整。

 

 

1.1.1.      iReport table型別的表單(例:押金報表)

在iReport中是有table的控制元件的,這裡寫的table型別的表單主要是在不用table控制元件的情況下,運用iReport製作出table的樣式。以押金報表為例。

1.設計報表樣式佈局,然後選中所有新增邊框的列,右擊選擇Padding and Borders 設計自己需要的格式,例如Line width 選擇1 選擇實線。就可以啦,當然可以根據需要設計邊框上下左右的線的樣式。這樣就設計好了型別為table的報表。

 

2. 另外一種設計就是在屬性皮膚中是利用控制元件的屬性來設定。形如圖。

 

3.可以嚴格分出table_ch、table_th、table_td、table的樣式(顯示不同的顏色)。選擇不同的行,在屬性style中修改屬性值(預設屬性是空)如下圖二、三。不過這個屬性存在一個問題 ,比如在上面的押金錶中個利用這個是屬性就不行會提示如圖四的提示。是什麼原因,暫時沒有解決,所以,如果style屬性不能使用的話,建議用第一種方式來設計表格。

(注:以上就是利用iReport做報表的用法報表之間引數的傳遞)

 

 

1.1.1.      Dorado7中iReport的配置

2.4.1.Dorado7 中如何使用iReport列印報表

u    在伺服器端安裝swftools-0.9.1.exe轉換工具

在war包的bdf.properties中配置bdf.report.pdfToSwf變數值,如:bdf.report.pdfToSwf=D:/Program Files/SWFTools/pdf2swf.exe

報表開發時注意新增一個parameter:CUSTOM_DATASOURCE,值為空,這樣框架會自動使用預設的資料來源。

u    jasper檔案通過報表模板維護介面新增;(針對此專案,由於維護介面的問題,新增儲存後還需要通過sqldeveloper直接在資料庫中設定bdf_reports其datasource_name=WY)

u    在業務介面上通過如下程式碼開啟報表:

view的packages設定為:jasperreports,swfviewer

js報表呼叫程式碼:

var report = new bdf.JasperReports();

report.showReport("checkin",{p1:"value1",p2:"value2"});

其中第一個引數對應為報表模板中新增報表的名稱。

第二個引數json物件為需要傳入報表的引數定義;

 

2.4.2.       Dorado7中iReport 預覽問題

預覽時中文漢字不能顯示。安裝xpdf-chinese-simplified語言包

步驟:

2.1.在war包的bdf.properties中配置bdf.report.pdfToSwf變數值,如:

bdf.report.xpdfPath=D:/ProgramFiles/xpdf-chinese-simplifie

2.2.依次選中可能出現漢字的文字框,進行如下設定

fontname:宋體

PDFfont name: STSong-Light;

pdfEncoding=UniGB-UCS2-H

PdfEmbedded:打鉤選擇(可有可無)

 

2.4.3.       Dorado7中 Grid匯出報表

將dorado7中的DataGrid以及AutoForm控制元件中的資料匯出成報表(支援PDF和Excel兩種格式),同時可以利用BDF報表模組的swf報表瀏覽器,線上瀏覽產生報表檔案,供使用者線上瀏覽和下載使用。

u   同樣首先安裝swftool工具

u    view的packages設定為:jasperreports,swfviewer

u    在業務介面上通過如下程式碼呼叫即可。

var report = new bdf.Report();

report.showGridReportDialog(this,"gridFeeBill",null,true,

true,true);

·        第一個引數:表示當前的view物件;

·        第二個引數:表示要匯出報表的DataGrid的id;

·        第三個引數:匯出報表的初始化引數;

·        第四個引數:是否顯示線上預覽按鈕;

·        第五個引數:是否顯示直接匯出PDF按鈕;

·        第六個引數:是否顯示直接匯出Excel按鈕;

u   在執行js之後,可以根據自己的需要設計報表的樣式和標題。

(關於dorado7中Grid和Form的報表匯出,在BSDN中有詳細說明

http://wiki.bsdn.org/pages/viewpage.action?pageId=3964933

轉自 http://blog.csdn.net/q326527970/article/details/7049047iReport 4.1 報表製作,子報表,例項解析

相關文章