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
背景部分會顯示每一頁上,並不能溢出到下一個頁面。放在這一部分的元素在頁面初始化的時候求值,並顯示在背景中。所有其他的頁面對象被顯示在背景上對象的頂部。這部分是用於創建頁面水印有用。
部分,元素和屬性的關係
下圖顯示的元素和屬性在報表中的部分關係。
section元素
所有上述報表部分都是可選的。但任何報表模板將至少有一個這樣的部分。每一節都包含一個單一的
這些元素都必須包含一個
下表總結了
屬性
描述
有效值
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" >
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=".">
接下來,讓我們打開命令行窗口並轉到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窗口打開如下面的屏幕:
在這裏,我們可以在每個文本被打印的部分看到。但應當注意的是,作爲JRXML包含