JasperReports報表區段

我們將在本章開始,一個簡單的報表模板的結構看。依樣畫葫蘆JasperReports的結構報表模板歸類到多個區段。部分是有規定的高度,並且可以包含像直線,矩形,圖像或文本字段對象報表的部分。

通過提供的報表數據源的虛擬記錄的報表引擎遍歷,在報表填充的時候。根據每個部分的定義的行爲,引擎則呈現每個報表節在適當的時候。舉例來說,細節部分的數據源中呈現爲每個記錄。當頁中斷,頁眉和頁面頁腳節在需要時提供。

在JasperReports術語,報表區段也被稱爲報表帶區。部分是由一個或多個頻段。這些部分在報告生成時間反覆填充並寫在文件最後。

主要章節

在JasperReports報表模板主要有以下幾個部分:

下表總結了每個部分:

Section

描述

Title

本節中只出現一次在報表的開頭。

Page Header

這部分出現在每一頁的開頭生成的文檔中。

Column Header

這部分顯示在生成的文檔中的每一列的開頭。如果報表只有一個定義列,那麼列標題和腳註部分被忽略。

Group Header

這部分是由一個報告組(組章)引入。每次分組表達式改變其值,組頁眉部分上面印的細節部分。在情況下,如果超過一個組被定義,組頁眉打印在組定義的順序。

Detail

這部分是重複的報表的數據源提供的數據的每一行。細節部分可以由多個頻段。

Group Footer

這部分是由一個報告組(組章)引入。該組頁腳節印下的分組表達式的值更改前的細節部分。組頁腳始終打印在數據源的數據的最後一行。在情況下,如果超過一個組被定義,組頁腳打印在組定義的順序相反。

Column Footer

本節將出現在每一列的底部。如果報告的列數爲1,則列標題和腳註部分被忽略。

Page Footer

本節出現在每個頁面的底部。

Last Page Footer

這部分取代了報表的最後一頁上的常規頁頁腳。在情況下,摘要部分也存在,那麼這可能不是該文件的最後一頁。這部分有時是有用的,當彙總信息具有在最後一頁的底部顯示。

Summary

本節中只出現一次在報告的末尾。

No Data

這部分被打印時,當無資料打印報表屬性設置爲無數據段。如果部在報告模板中定義,並且如果數據源是空的,那麼部分將是唯一一個在填充時考慮,其含量將產生報表輸出。

Background

背景部分會顯示每一頁上,並不能溢出到下一個頁面。放在這一部分的元素在頁面初始化的時候求值,並顯示在背景中。所有其他的頁面對象被顯示在背景上對象的頂部。這部分是用於創建頁面水印有用。

部分,元素和屬性的關係

下圖顯示的元素和屬性在報表中的部分關係。

Report

section元素

所有上述報表部分都是可選的。但任何報表模板將至少有一個這樣的部分。每一節都包含一個單一的元素作爲其唯一的子元素。一個可以包含零個或多個下列子元素:

, , , , , , , or

這些元素都必須包含一個作爲其第一個元素(除了elementGroup)。一個決定了數據是如何奠定了該特定元素。與變量和參數,不要求報表內容有一個名字,因爲通常不需要獲得一個報表模板內的任何單個元素。

下表總結了屬性:

屬性

描述

有效值

x

指定頻帶元件的x座標。

一個整數值,表示以像素爲單位的元素的x座標。此屬性是必需的。

y

指定頻帶元件的y座標。

一個整數值,表示在y以像素爲元素的座標。此屬性是必需的。

width

指定頻帶元件的寬度。

一個整數值,表示該元素的寬度以像素爲單位。此屬性是必需的。

height

指定頻帶元件的高度。

一個整數值,表示以像素爲元素的高度。此屬性是必需的。

key

帶元素的唯一標識符。

唯一字符串值。

stretchType

指定包含帶延伸當元素如何延伸

NoStretch (default): 該元素不會延長。
RelativeToTallestObject: 該元素將伸展以適應它的組的最高的對象。
RelativeToBand: 該元素將延伸到適合帶的高度。

positionType

指定當頻帶延伸元素的位置。

Float: 元素將取決於周圍元件的尺寸移動。
FixRelativeToTop (default): 該元素將保持一個固定的位置相對於帶的頂部。
FixRelativeToBottom: 該元素將保持一個固定的位置相對於帶的底部。

isPrintRepeatedValues

如果指定的值重複打印。

true (default): 重複的值將被打印出來。
false: 重複的值將不被打印出來。

mode

指定元素的背景模式

不透明的,透明的

isRemoveLineWhenBlank

如果指定了當它是空白,並有在相同的水平空間沒有其他元素的元素應被刪除。

true, false

isPrintInFirstWholeBand

如果指定的元素必須打印在整個頻段,也就是說,未被報表的頁面或列之間分割的波段。

true, false

isPrintWhenDetailOverFlows

指定是否當頻帶溢出到新頁或列中的元素將被打印出來。

true, false

printWhenGroupChanges

指定在指定的組改變元素將被打印。

string值

forecolor

指定元素的前景色。

無論前面加上#字符,或以下預定義值中的一個十六進制RGB值:black, blue, cyan, darkGray, gray, green, lightGray, magenta, orange, pink, red, yellow, white.

backcolor

指定元素的背景顏色。

同樣作爲有效值的前景色

段屬性

以下是報表的部分屬性:

高度

該部分的高度指定高度,該特定部分的像素,是非常重要的在整體報表設計。

打印當表達式

布爾表達式,確定該部分是否應打印或不打印。

SPLIT ALLOWED

一個標誌,指示該部分是否允許分裂時,它不適合在當前頁面上。如果爲true,該部分將被轉移到下一個頁面。注意,如果一節不適合下頁上,那麼將會考慮該標誌的值的拆分。 splitType可以利用以下值:

  • splitType="Stretch" : 拆分拉伸內容。如果該部分在當前頁上延伸(如果可用空間小於宣高度),這是添加到原始高度的區域是否允許分割到下頁

  • splitType="Prevent" : 避免在第一次嘗試分割。如果部分不適合在下一頁中,分割通常發生,預防頻帶分割是有效的只有在第一次分割嘗試。

  • splitType="Immediate" : 立即繪製。該頻段允許的任何地方,除了分割高於其最頂端的元素。

例子

爲演示開始每個部分讓我們編寫報表模板(jasper_report_template.jrxml)。將此文件保存到C: oolsjasperreports-5.0.1 est目錄。在這個文件中,我們將顯示在每個部分的文本(上面所討論的)。該文件的內容如下所述:  

<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports
http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="jasper_report_template" pageWidth="300" pageHeight="300" columnWidth="300" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" > <band height="50"> <textField> <reportElement x="100" y="16" width="100" height="20"/> <textElement/> <textFieldExpression> <![CDATA["Title"]]> </textFieldExpression> </textField> </band> <band height="40"> <reportElement mode="Opaque" x="100" y="10" width="90" height="20"/> <font isBold="true"/> <![CDATA["Page Header"]]> <band height="40"> <reportElement x="100" y="10" width="90" height="20"/> <font isItalic="true"/> <![CDATA["Column Header"]]> <band height="40"> <reportElement mode="Opaque" x="100" y="10" width="90" height="20" backcolor="#99CCFF"/> <![CDATA["Report Details"]]> <band height="40"> <reportElement x="100" y="10" width="90" height="20"/> <![CDATA["Column Footer"]]> <band height="40"> <reportElement x="100" y="10" width="90" height="20"/> <![CDATA["Page Footer"]]> <band height="40"> <reportElement x="100" y="10" width="90" height="20"/> <![CDATA["Last Page Footer"]]>

<band height="40"> <reportElement x="100" y="10" width="90" height="20"/> <![CDATA["Summary"]]>

java代碼填寫並生成報告如下。保存這個文件JasperReportFill.java 到 C: oolsjasperreports-5.0.1 estsrccomyiibai 目錄.

package com.yiibai; import net.sf.jasperreports.engine.JREmptyDataSource; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JasperFillManager; public class JasperReportFill { public static void main(String[] args) { String sourceFileName = "C://tools/jasperreports-5.0.1/test/" + "jasper_report_template.jasper"; try { JasperFillManager.fillReportToFile(sourceFileName, null, new JREmptyDataSource()); } catch (JRException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

在這裏,我們填充報表時,以模擬一個數據源,在這一個記錄使用JREmptyDataSource的實例,但與所有在這個單一記錄爲null的字段。

報表生成

將編譯和執行使用常規Ant構建過程上面的文件build.xml文件中的內容(根據目錄保存:C: oolsjasperreports-5.0.1 est)情況如下。(saved under directory C: oolsjasperreports-5.0.1 est) 如下.

<project name="JasperReportTest" default="viewFillReport" basedir="."> <import file="baseBuild.xml" /> <target name="viewFillReport" depends="compile,compilereportdesing,run" description="Launches the report viewer to preview
the report stored in the .JRprint file."> <java classname="net.sf.jasperreports.view.JasperViewer" fork="true"> <arg value="-F${file.name}.JRprint" /> <classpath refid="classpath" /> <target name="compilereportdesing" description="Compiles the JXML file and
produces the .jasper file."> <taskdef name="jrc" classname="net.sf.jasperreports.ant.JRAntCompileTask"> <classpath refid="classpath" /> <jrc destdir="."> <fileset dir="."> <include name="*.jrxml" /> <classpath refid="classpath" />

接下來,讓我們打開命令行窗口並轉到build.xml文件放置的目錄。最後執行的命令 ant -Dmain-class=com.yiibai.JasperReportFill(viewFullReport是默認的目標),如下所示:

C: oolsjasperreports-5.0.1 est>ant -Dmain-class=com.yiibai.JasperReportFill
Buildfile: C: oolsjasperreports-5.0.1 estuild.xml

clean-sample:
[delete] Deleting directory C: oolsjasperreports-5.0.1 estclasses
[delete] Deleting: C: oolsjasperreports-5.0.1 estjasper_report_template.jasper
[delete] Deleting: C: oolsjasperreports-5.0.1 estjasper_report_template.jrprint

compile:
[mkdir] Created dir: C: oolsjasperreports-5.0.1 estclasses
[javac] C: oolsjasperreports-5.0.1 estaseBuild.xml:28:
warning: 'includeantruntime' was not set, defau
[javac] Compiling 1 source file to C: oolsjasperreports-5.0.1 estclasses

compilereportdesing:
[jrc] Compiling 1 report design files.
[jrc] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.engine.xml.JRXmlDigesterFac
[jrc] log4j:WARN Please initialize the log4j system properly.
[jrc] log4j:WARN See http://logging.apache.org/log4j/1.2/faq.htmll#noconfig for more info.
[jrc] File : C: oolsjasperreports-5.0.1 estjasper_report_template.jrxml ... OK.

run:
[echo] Runnin class : com.yiibai.JasperReportFill
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnviro
[java] log4j:WARN Please initialize the log4j system properly.

viewFillReport:
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnviro
[java] log4j:WARN Please initialize the log4j system properly.

BUILD SUCCESSFUL
Total time: 18 minutes 22 seconds

正如上文編譯的結果,JasperViewer窗口打開如下面的屏幕:

Jasper

在這裏,我們可以在每個文本被打印的部分看到。但應當注意的是,作爲JRXML包含元件,它將被顯示在報表,而不是所顯示的元素的最後一頁。如果有多個列的元素將只顯示在報告中。