iReport的(報表結構)
報表結構
這章我們將分析報表的構成,來觀察一下它由那幾部分構成,當用資料列印時這幾部分是如何運轉的。
Bands
一個報表依靠“type”頁來定義說明。它被分成不同水平的一份被叫做bands。當報表加入資料去列印時,這些部分被印刷很多次依照他們自身的屬性(依照報表建立者設計的規則)。舉個例子,page header 被重複的列印在每頁的開始部分,這樣的話,每個band都會重複的列印每一單一的記錄。
這個 “type” 頁被分成9個預先確定的bands作為新組被加進去。事實上,iReport控制每一個頭條(Group header)和一個摘要條(Group footer)為每一個組。
圖4.1
一個帶總是和頁的寬度一樣(左右的空白除外)然而它的高度,即使已經被設計好,但可能還會依據被包含在內的元素的實際來列印;它能夠自由的延長靠近頁底。這種特色的出現在bands包含一個subreports或者text field時縱向的內容。通常情況下,bands的高度被使用者指定一個“minimal height”。不是所有的bands能依照內容被這個外力改變,特別是:Column Footer,Page Footer 和 Last Page Footer.所有的band高度的總和(除了background)總是小於或等於頁的top和bottome之間的最小高度。
Title
這是首先看到的band
during design time, the report page height (包含top和bottome標記之間)。如果title被列印在幾張單獨的頁面上,這個band的高度不用被包括在整個band的高度之內的,一般低與page的高度。
這個band允許你設計一個page
這個band在每一個詳細的列開始時被列印。這column的概念一會兒再結實。通常的,包含標籤的tabular報表的列的名字被插入在這裡。
一個報表能容納零個到多個group bands,它允許收藏詳細的記錄在不動groups。有group header ,自然要有group footer(他們能能獨立的展現和取消)。不同的屬性被聯合在一個group。他們確定他們的行為功過檢視 graphic point。它是可能的影響一個新的頁的group header或者一個newcolumn,列印這個band在整個頁的下面,如果這個bands超出了一個單獨的頁(以一個組的級別作為一個page header)。它是可能的去修改被請求的高度並列印它:如果它是超過其他的高度,這個group將被列印在一個新的page(特別要注意它的值由於太長,在列印時會無限的迴圈),等等。接下來我們將詳細討論groups。
Detail band 將每個通過datasources讀到記錄響應的傳給印表機。很可能,大多數的元素都被放在這裡。
這個band表示一個group的結束。通常它包含的區域顯示小計或者分開圖解元素,作為一條線,等等。
這個band的出現表示每一個column的結束。它的尺寸是不能被調整的(即使它包含一個相當大的元素,像subreports或者文字域)。
這是頁尾。它和page header同時出現在每頁。同column footer一樣,他是不足夠大的。
如果你想使最後一頁的footer與其他的頁的footers不一樣,這時可能就要用到這個band。如果這個band的高度是0,他將被完全的忽視,其他確定結構的普通頁也能適用在最後一頁。它首次出現在JasperReports的0.6.2版本。
在其他的地方這個組名被叫做report footer。它允許你在report的最後插入你想要的任何內容關於總結等。
Band第一次出現在JasperReport0.4.6版本時。它由於許多使用者的堅持不懈的要求能夠建立水印和similar effects而引入 (整個頁面的結構). 它可以具有最大的高度以至於和頁面高度一樣。
報表屬性:
現在我們已經看過報表的單個部分,我們將繼續建立一個新的報表。按選單上的這個按鈕選擇New Document:開啟一個視窗。在這裡填寫報表的屬性(圖4.2)。這個視窗可以隨時開啟通過view選單的Report properties。
圖4.2
報表的名字是第一個屬性。這個名字是本地命名,它和原始檔的名字是相互獨立的,它僅僅被JasperReports library 呼叫(例如:命名一個報表編譯後的java檔案)。
頁面的尺寸大概是報表最重要的屬性。一系列報表的尺寸標準被提議。iReport 和 JasperReports使用的最小量度單位是畫素。(畫素大小是75點每英寸,每英寸的點數)。
然而,我們經常使用的報表的量度單位更為平常,像釐米,英寸或毫米。
表4.1列出了量度標準和畫素大小。由於尺寸管理基於畫素,所以當我們用不同的量度看同一資料會發生很大改動。
Page type |
Dimensions in pixel(畫素) |
LETTER |
612 x 792 |
NOTE |
540 x 720 |
LEGAL |
612 x 1008 |
A0 |
2380 x 3368 |
A1 |
1684 x 2380 |
A2 |
1190 x 1684 |
A3 |
842 x 1190 |
A4 |
595 x 842 |
A5 |
421 x 595 |
A6 |
297 x 421 |
A7 |
210 x 297 |
A8 |
148 x 210 |
A9 |
105 x 148 |
A10 |
74 x 105 |
B0 |
2836 x 4008 |
B1 |
2004 x 2836 |
B2 |
1418 x 2004 |
B3 |
1002 x 1418 |
B4 |
709 x 1002 |
B5 |
501 x 709 |
ARCH_E |
2592 x 3456 |
ARCH_D |
1728 x 2592 |
ARCH_C |
1296 x 1728 |
ARCH_B |
864 x 1296 |
ARCH_A |
648 x 864 |
FLSA |
612 x 936 |
FLSE |
612 x 936 |
HALFLETTER |
396 x 612 |
_11X17 |
792 x 1224 |
LEDGER |
1224 x 792 |
表4.1
通過修改高度和寬度,你就可以建立任意大小的報表。報表頁的定位有landscape和portrait選項,事實上這並沒有太大的意義,因為報表頁是由寬和高來刻畫它的尺度的,並且每個單頁都是相互獨立。然而這個屬性可以別用來確定報表的輸出。
頁面的空白尺寸依賴於Margin選項卡的四個輸入值來確定。
列
像你看到的那樣,一個報表頁被幾條平行線分開為幾部分:bands。這個選項頁是用來排版報表的,現在的這部分具有獨立的資料(像title片段,或者page footers),和其他的片段一樣被列印根據資料記錄的不同從零開始(像group headers和detail)。這個選項頁的最後一個屬性值能分開垂直的列為了利用報表頁中可利用的空間。
上下文中的column的概念很容易被”field”搞混。事實上,column和記錄集是沒有關係的,只和detail band有關係。意思就是說一條記錄用十個fields和一個表的話,不需要十列。然而,這些元素可以用table實現恰當的放置。十列將導致一個很長的記錄列(非常狹窄的橫條)被列印。下面的例子將告訴你怎樣設定值為一個簡單的列報表在A4紙上。
圖4.3
Columns的值是1,它的寬度和整個頁面一樣,除了空白。列之間的空間沒有意義,所以它的值是0。
圖4.4圖4.5
看4.5圖,這個頁的大部分沒有被使用,如果使用大量的列,這個報表看起來會好看一些。圖4.6展示了兩列報表的尺寸大小。
圖4.6
既然這樣,在這個“columns“,我們輸入2。iReport將自動的計算列的寬度依照頁的空白和寬度。如果你想在兩列之間插入空白,那就為”spacing”填寫一個值。
像4.8圖中看到的,這個頁面的空白有被更好的利用。
濫用列的話可能將列印一個非常長列(像一個電話本一樣)。總之,當detail band和連續的bands出現超過一列的寬度空白時你要記住使用列來減少寬度。所有的空白,列的寬度和每列之間的空白,加起來要小於頁的寬度。如果不檢驗這種情形的話可能導致錯誤產生。
圖4.7圖4.8
在圖4.5