1. 程式人生 > >iReport的(報表結構)

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)總是小於或等於頁的topbottome之間的最小高度。

Title

這是首先看到的band

。它被建立僅僅一次,可能被列印在每一分開的頁。耍點小聰明,你能利用這個模擬一個無效的subreports(隨後我將看看如何做)。關於尺度的確認,它是不可能躲過去的,在報表頁的高度設計期間。As regards the admitted dimensions, it is not possible to exceed,

during design time, the report page height (包含topbottome標記之間)。如果title被列印在幾張單獨的頁面上,這個band的高度不用被包括在整個band的高度之內的,一般低與page的高度。

這個band允許你設計一個page

header。它的高度在設計階段被定義,通常不會改變在建立報表的過程中(除非有垂直插入相當大的成分,例如這個textfields包含很長的文字和subreports)。頁面的header出現在整個列印頁的相同位置在設計階段期間。TitleSummary bands不包括page header 在列印一個單獨的頁時。

這個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,他將被完全的忽視,其他確定結構的普通頁也能適用在最後一頁。它首次出現在JasperReports0.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

通過修改高度和寬度,你就可以建立任意大小的報表。報表頁的定位有landscapeportrait選項,事實上這並沒有太大的意義,因為報表頁是由寬和高來刻畫它的尺度的,並且每個單頁都是相互獨立。然而這個屬性可以別用來確定報表的輸出。

頁面的空白尺寸依賴於Margin選項卡的四個輸入值來確定。

像你看到的那樣,一個報表頁被幾條平行線分開為幾部分:bands。這個選項頁是用來排版報表的,現在的這部分具有獨立的資料(像title片段,或者page footers),和其他的片段一樣被列印根據資料記錄的不同從零開始(像group headersdetail)。這個選項頁的最後一個屬性值能分開垂直的列為了利用報表頁中可利用的空間。

上下文中的column的概念很容易被”field”搞混。事實上,column和記錄集是沒有關係的,只和detail band有關係。意思就是說一條記錄用十個fields和一個表的話,不需要十列。然而,這些元素可以用table實現恰當的放置。十列將導致一個很長的記錄列(非常狹窄的橫條)被列印。下面的例子將告訴你怎樣設定值為一個簡單的列報表在A4紙上。

4.3

Columns的值是1,它的寬度和整個頁面一樣,除了空白。列之間的空間沒有意義,所以它的值是0

4.44.5

4.5圖,這個頁的大部分沒有被使用,如果使用大量的列,這個報表看起來會好看一些。圖4.6展示了兩列報表的尺寸大小。

4.6

既然這樣,在這個“columns“,我們輸入2iReport將自動的計算列的寬度依照頁的空白和寬度。如果你想在兩列之間插入空白,那就為”spacing”填寫一個值。

4.8圖中看到的,這個頁面的空白有被更好的利用。

濫用列的話可能將列印一個非常長列(像一個電話本一樣)。總之,當detail band和連續的bands出現超過一列的寬度空白時你要記住使用列來減少寬度。所有的空白,列的寬度和每列之間的空白,加起來要小於頁的寬度。如果不檢驗這種情形的話可能導致錯誤產生。

4.74.8

在圖4.5