建立圖表



以前,人們不得不依賴指令碼程式來收集圖表資料,並使用報表模板中的影像元素來呈現圖表。JasperReports 現在簡化了這一過程,因為它使用新的圖表元件內建支援圖表。

使用新的圖表元件,使用者只需要應用視覺設定並定義有助於構建圖表資料集的表示式。JasperReports 使用 JFreeChart 作為底層圖表庫。配置新的圖表元件時,涉及以下三個元件:

  • 整體圖表元件。

  • 圖表資料集(它分組圖表資料相關的設定)。

  • 圖表繪圖區(它分組與圖表專案呈現方式相關的視覺設定)。

JasperReports 目前支援以下型別的圖表:餅圖、3D 餅圖、條形圖、3D 條形圖、XY 條形圖、堆疊條形圖、3D 堆疊條形圖、折線圖、XY 折線圖、面積圖、XY 面積圖、堆疊面積圖、散點圖、氣泡圖、時間序列圖、高低開收圖、K 線圖、多軸圖、儀表圖、溫度計圖和甘特圖。

圖表屬性

圖表是普通的報表元素,因此它們與所有其他報表元素共享一些屬性。有一個名為 <chart> 的 JRXML 元素用於建立所有型別的圖表。此元素對所有型別的圖表應用特殊的圖表特定設定。

圖表子元素

<chart> 元素的子元素如下:

  • <reportElement> − 這些是可顯示的物件,例如靜態文字、文字欄位、影像、線條和矩形,您可以將它們放在報表模板節中。

  • <Box> − 此元素用於用可在每一側自定義的邊框圍繞圖表。

  • <chartTitle> − 此元素用於放置圖表的標題。position 屬性決定圖表在報表中的標題位置。此元素具有屬性 - Position(值可以是 TopBottomLeftRight。預設值為 Top)、color。<chartTitle> 具有 fonttitleExpression 作為子元素。

  • <chartSubtitle> − 此元素用於放置圖表的副標題。此元素具有屬性 - color。<chartSubtitle> 具有 fontsubtitleExpression 作為子元素。

  • <chartLegend> − 可以使用此元素控制字型相關的屬性以及圖表圖例的文字顏色和背景顏色。此元素具有屬性 - textColorbackgroundColor

  • <anchorNameExpression> − 此元素建立錨點的目標。

  • <hyperlinkReferenceExpression> − 此元素包含一個報表表示式,指示外部資源(通常是 URL)的名稱。

  • <hyperlinkAnchorExpression> − 超連結指向外部資源中的錨點。

  • <hyperlinkPageExpression> − 超連結指向當前報表中的頁面。

  • <hyperlinkTooltipExpression> − 此元素控制超連結的工具提示。表示式的型別應為 java.lang.String

  • <hyperlinkParameter> − 此元素存在時,根據引數值生成最終超連結。

圖表屬性

<chart> 元素中所有圖表型別都可用的屬性如下:

  • isShowLegend − 此屬性用於確定是否在報表上顯示圖表圖例。值可以是 truefalse。預設值為 true

  • evaluationTime − 確定何時評估圖表的表示式。值可以是 NowReportPageColumnGroupBand。預設值為 Now

  • evaluationGroup − 此屬性確定用於評估圖表表示式的組的名稱。此屬性的值必須與我們想要用作圖表評估組的組的名稱匹配。

  • hyperlinkType − 此屬性可以儲存任何文字值。預設值為 None。這意味著,即使存在特殊的超連結表示式,文字欄位或影像也不代表超連結。

  • hyperlinkTarget − 此屬性有助於在檢視器中單擊指定連結時自定義指定連結的行為。值可以是 SelfBlank。預設值為 Self

  • bookmarkLevel − 此屬性設定為正整數時,會在匯出到 PDF 的報表中生成書籤。預設值為 0

  • customizerClass − 這是可用於自定義圖表的類的名稱(可選)。此元素的值必須是包含自定義程式類名稱的字串。

圖表自定義

如上所述,JasperReports 使用 JFreeChart 作為底層圖表庫。JFreeChart 包含 JasperReports 不直接支援的功能。我們可以透過在 <chart> 元素中提供自定義程式類來利用這些功能。自定義程式類只不過是 net.sf.jasperreports.engine.JRChartCustomizer 介面的實現。實現此介面最簡單的方法是擴充套件 net.sf.jasperreports.engine.JRAbstractChartCustomizer 類,從而可以訪問引數、欄位和變數,以便根據報表資料更靈活地自定義圖表。

圖表資料集

所有圖表型別的一個共同屬性是 <dataset> 元素。圖表資料集有助於對映報表資料並在執行時檢索圖表資料。每種圖表型別都包含不同的子元素來定義圖表的表示式。這些表示式定義用於生成圖表的資料。所有這些子元素都包含一個 <dataset> 元素,該元素定義何時評估和重置圖表的表示式。

JasperReports 中提供了多種型別的圖表資料集,因為每種型別的圖表都使用某些資料集:餅圖、分類、XY、時間序列、時間段、XYZ 和高低。這些資料集型別都實現了 net.sf.jasperreports.engine.JRChartDataset 介面,該介面定義圖表資料集。所有圖表資料集的初始化和遞增方式相同;但是,它們僅在它們對映的資料型別或資料序列方面有所不同。

資料集屬性

下表總結了 <dataset> 元素的屬性:

屬性 描述
resetType 此屬性確定何時重置圖表表示式的值。 None、Report、Page、Column、Group。預設值為 Report
resetGroup 此屬性確定重置圖表表示式值的組的名稱。 此屬性的值必須與 JRXML 報表模板中宣告的任何組的名稱匹配。
incrementType 此屬性確定何時重新計算圖表表示式的值。 None、Report、Page、Column、Group。預設值為 "None"
incrementGroup 此屬性確定重新計算圖表表示式的組的名稱。 此屬性的值必須與 JRXML 報表模板中宣告的組的名稱匹配。

下表總結了 <dataset> 元素的子元素:

子元素 描述
<incrementWhenExpression> 可以透過使用此子元素過濾掉不需要的資料來自定義圖表資料集的遞增方式。
<datasetRun> 此元素包含例項化報表子資料集所需的資訊。

資料集型別

下面解釋特定資料集型別:

餅圖資料集

餅圖資料集的特點是以下表達式:

  • <keyExpression> − 代表構成餅圖中扇形的類別。此表示式可以返回任何 java.lang.Comparable 物件。

  • <valueExpression> − 生成與資料集中每個類別/鍵對應的值。值始終是 java.lang.Number 物件。

  • <labelExpression> − 如果此表示式不存在,圖表將為餅圖中的每個扇形顯示預設標籤。使用此表示式(返回 java.lang.String 值)來自定義餅圖的專案標籤。

  • <sectionHyperlink> − 設定與餅圖扇區關聯的超連結。

分類資料集

分類資料集的特點是 <categorySeries> 元素,其中包含:

  • <seriesExpression> − 指示序列的名稱。此表示式可以返回任何 java.lang.Comparable 物件。

  • <categoryExpression> − 返回序列表達式指定的序列中每個值的類別名稱。類別是 java.lang.Comparable 物件。

  • <valueExpression> − 生成與資料集中每個類別對應的值。值始終是 java.lang.Number 物件。

  • <labelExpression> − 如果此表示式不存在,圖表將為圖表中的每個專案顯示預設標籤。使用此表示式(返回 java.lang.String 值)來自定義圖表的專案標籤。

  • <itemHyperlink> − 設定與圖表專案關聯的超連結。

XY 資料集

XY 資料集的特點是 <xySeries> 元素,其中包含:

  • <seriesExpression> − 指示序列的名稱。此表示式可以返回任何 java.lang.Comparable 物件。

  • <xValueExpression> − 返回表示將新增到當前資料序列的 (x, y) 對中的 X 值的 java.lang.Number 值。

  • <yValueExpression> − 返回表示將新增到當前資料序列的 (x, y) 對中的 Y 值的 java.lang.Number 值。

  • <labelExpression> − 如果此表示式不存在,圖表將為圖表中的每個專案顯示預設標籤。使用此表示式(返回 java.lang.String 值)來自定義圖表的專案標籤。

  • <itemHyperlink> − 設定與圖表專案關聯的超連結。

XYZ 資料集

XYZ 資料集的特點是 <xyzSeries> 元素,其中包含:

  • <seriesExpression> − 指示序列的名稱。此表示式可以返回任何 java.lang.Comparable 物件。

  • <xValueExpression> − 返回表示將新增到當前資料序列的 (x, y, z) 專案中的 X 值的 java.lang.Number 值。

  • <yValueExpression> − 返回表示將新增到當前資料序列的 (x, y, z) 專案中的 Y 值的 java.lang.Number 值。

  • <zValueExpression> − 返回表示將新增到當前資料序列的 (x, y, z) 專案中的 Z 值的 java.lang.Number 值。

  • <labelExpression> − 如果此表示式不存在,圖表將為圖表中的每個專案顯示預設標籤。使用此表示式(返回 java.lang.String 值)來自定義圖表的專案標籤。

  • <itemHyperlink> − 設定與圖表專案關聯的超連結。

時間序列資料集

時間序列資料集的特點是 timePeriod 屬性和 <timeSeries> 元素。timePeriod 屬性指定資料集中資料序列的型別。時間序列可以包含與日、月、年或其他預定義時間段關聯的數值。可能的值為:Year、Quarter、Month、Week、Day - 這是預設值、Hour、Minute、Second、Millisecond。

<timeSeries> 元素包含:

  • <seriesExpression> − 指示序列的名稱。此表示式可以返回任何 java.lang.Comparable 物件。

  • <timePeriodExpression> − 返回 java.util.Date 值,引擎將根據上面提到的 timePeriod 屬性設定的值從中提取相應的時間段。

  • <valueExpression> − 返回與遞增資料集的當前序列時相應的時間段值關聯的 java.lang.Number 值。

  • <labelExpression> − 如果此表示式不存在,圖表將為圖表中的每個專案顯示預設標籤。使用此表示式(返回 java.lang.String 值)來自定義圖表的專案標籤。

  • <itemHyperlink> − 設定與圖表專案關聯的超連結。

時間段資料集

時間段資料集的特點是 <timePeriodSeries> 元素,其中包含:

  • <seriesExpression> − 指示序列的名稱。此表示式可以返回任何 java.lang.Comparable 物件。

  • <startDateExpression> − 指定將數值新增到時間段序列時與其關聯的日期區間的開始。

  • <endDateExpression> − 指定將數值新增到時間段序列時與其關聯的日期區間的結束。

  • <valueExpression> − 返回 java.lang.Number 值,該值與由開始日期和結束日期表示式指定的當前日期區間相關聯。

  • <labelExpression> − 如果此表示式不存在,圖表將為圖表中的每個專案顯示預設標籤。使用此表示式(返回 java.lang.String 值)來自定義圖表的專案標籤。

  • <itemHyperlink> − 設定與圖表專案關聯的超連結。

高低資料集

高低資料集具有以下特徵:

  • <seriesExpression> − 目前,高低或燭形圖中只支援一個序列。但是,此單個序列必須由此表示式返回的 java.lang.Comparable 值標識,並且還必須用作圖表圖例中的序列名稱。

  • <dateExpression> − 返回當前(高、低、開、收、成交量)項所指的日期。

  • <highExpression> − 返回一個 java.lang.Number 值,該值將在資料集遞增時新增到序列的資料項中。

  • <lowExpression> − 返回一個 java.lang.Number 值,該值將在資料集遞增時新增到序列的資料項中。

  • <openExpression> − 返回一個 java.lang.Number 值,該值將在資料集遞增時新增到序列的資料項中。

  • <closeExpression> − 返回一個 java.lang.Number 值,該值將在資料集遞增時新增到序列的資料項中。

  • <volumeExpression> − 一個數值表示式,返回當前資料項要使用的成交量值。它僅用於燭形圖。

  • <itemHyperlink> − 設定與圖表專案關聯的超連結。

值資料集

這是一個特殊圖表資料集實現,它包含單個值,用於呈現儀表和溫度計圖表。該值使用 <valueExpression> 表示式收集。

圖表繪圖

所有圖表型別中另一個常見的 JRXML 元素是 <plot> 元素。這允許我們定義圖表的幾個特性,例如方向和背景顏色。繪圖根據圖表型別而有所不同。

繪圖屬性

下表總結了 <plot> 元素的屬性:

屬性 描述
backcolor 此屬性定義圖表的背景顏色。 任何六位十六進位制值都是此屬性的有效值。十六進位制值必須以 # 開頭。
orientation 此屬性定義圖表的方位。 水平,垂直 預設值為“垂直”
backgroundAlpha 此屬性定義圖表背景顏色的透明度。 此屬性的有效值包括 0 到 1(含)之間的任何十進位制數。數字越高,背景越不透明。預設值為“1”。
foregroundAlpha 此屬性定義圖表前景顏色的透明度。 此屬性的有效值包括 0 到 1(含)之間的任何十進位制數。數字越高,背景越不透明。預設值為“1”。
labelRotation 此屬性允許旋轉 x 軸上的文字標籤以順時針或逆時針旋轉。此屬性僅適用於 x 軸不是數值或不顯示日期的圖表。 預設值為“0.0”。

<plot> 元素有一個子元素 <seriesColor>,其屬性為:seriesOrdercolor。此元素自定義序列的顏色及其在顏色序列中的位置。

圖表繪圖的特定設定

  • piePlot − 它沒有特定設定

  • pie3DPlot − 包含depthFactor 屬性,這是一個 0 到 1 之間的數值,表示餅圖深度佔繪圖區域高度的百分比。

  • barPlot − 可以顯示或隱藏刻度標籤、刻度標記或專案標籤,併為兩個軸提供設定。

  • bar3DPlot − 提供與 barPlot 相同的設定,並使用 xOffset 和 yOffset 屬性生成 3D 效果。

  • linePlot − 可以顯示或隱藏連線專案點的線條,可以顯示或隱藏與專案點關聯的形狀,併為兩個軸提供設定。

  • scatterPlot − 與 linePlot 類似,它可以顯示或隱藏連線專案點的線條,可以顯示或隱藏與專案點關聯的形狀,併為兩個軸提供設定。

  • areaPlot − 為兩個軸提供設定。

  • bubblePlot − 可以透過設定 scaleType 屬性來設定氣泡尺寸,併為兩個軸提供設定。

  • timeSeriesPlot − 可以顯示或隱藏連線專案點的線條,可以顯示或隱藏與專案點關聯的形狀,併為兩個軸提供設定。

  • highLowPlot − 可以顯示或隱藏開盤刻度,可以顯示或隱藏收盤刻度,併為兩個軸提供設定。

  • candlestickPlot − 可以顯示或隱藏成交量,併為兩個軸提供設定。

  • meterPlot − 包含刻度盤形狀、刻度角、測量單位、刻度間隔、刻度盤顏色、指標顏色、刻度顏色、值顯示字型、顏色和格式模式、資料範圍以及儀表間隔的特定設定。

  • thermometerPlot − 包含值位置、水銀顏色、顯示/隱藏值線、值顯示字型、顏色和格式模式、資料範圍、低範圍、中範圍和高範圍的特定設定。

  • multiAxisChart − 包含繪圖中包含的軸的特定設定。

圖表型別

JasperReports 提供對多種圖表型別的內建支援。它們列在下面:

  • pieChart − 餅圖資料集和餅圖繪圖的組合。

  • pie3DChart − 將餅圖資料集和 3D 餅圖繪圖組合在一起。

  • barChart − 分類資料集和條形圖繪圖的基本組合。

  • bar3DChart − 包含分類資料集和 3D 條形圖繪圖。

  • xyBarChart − 支援時間段資料集、時間序列資料集和 XY 資料集,並使用條形圖繪圖來呈現軸和專案。

  • stackedBarChart − 使用來自分類資料集的資料,並使用條形圖繪圖呈現其內容。

  • stackedBar3DChart − 使用來自分類資料集的資料,並使用 3D 條形圖繪圖呈現其內容。

  • lineChart − 將分類資料集和線條圖繪圖組合在一起。

  • xyLineChart − 將 XY 資料集和線條圖繪圖組合在一起。

  • areaChart − 使用面積圖繪圖呈現來自分類資料集的專案。

  • stackedAreaChart − 使用面積圖繪圖呈現來自分類資料集的專案。

  • xyAreaChart − 使用來自 XY 資料集的資料,並透過面積圖繪圖呈現它。

  • scatterChart − 將 XY 資料集與散點圖繪圖組合在一起。

  • bubbleChart − 將 XYZ 資料集與氣泡圖繪圖組合在一起。

  • timeSeriesChart − 將時間序列資料集和時間序列繪圖組合在一起。

  • highLowChart − 高低資料集和高低繪圖的組合。

  • candlestickChart − 使用來自高低資料集的資料,但使用特殊的燭形圖繪圖。

  • meterChart − 使用來自儀表繪圖的渲染選項,在刻度盤上顯示來自值資料集的單個值。

  • thermometerChart − 使用來自溫度計繪圖的渲染選項顯示值資料集中的單個值。

  • multiAxisChart − 包含多個範圍軸,所有這些軸都共享一個公共域軸。

示例

為了演示圖表,讓我們編寫一個新的報表模板 (jasper_report_template.jrxml)。在這裡,我們將 <barChart> 元素新增到 <pageHeader> 部分,並將 <pieChart> 新增到 <summary> 部分。我們將以圖表形式顯示每門課程獲得的分數。將其儲存到目錄 C:\tools\jasperreports-5.0.1\test。檔案內容如下所示:

<?xml version = "1.0" encoding = "UTF-8"?>

<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 = "595" pageHeight = "860"
   columnWidth = "515" leftMargin = "40" rightMargin = "40"
   topMargin = "50" bottomMargin = "50">

   <field name = "subjectName" class = "java.lang.String"/>
   <field name = "marks" class = "java.lang.Integer"/>
   
   <variable name = "countNumber" class = "java.lang.Integer" calculation = "Count">
      <variableExpression>
         <![CDATA[Boolean.TRUE]]>
      </variableExpression>
   </variable>
   
   <background>
      <band splitType = "Stretch"/>
   </background>
   
   <title>
      <band height = "79" splitType = "Stretch"/>
   </title>
   
   <pageHeader>
      <band height = "200">
    
         <barChart>
            <chart evaluationTime = "Report">
               <reportElement x = "0" y = "0" width = "555" height = "200"/>
            
               <chartTitle>
                  <titleExpression>
                     <![CDATA["My First JR Bar Chart"]]>
                  </titleExpression>
               </chartTitle>
            </chart>
      
            <categoryDataset>
               <dataset incrementType = "None"/>
            
               <categorySeries>
                  <seriesExpression>
                     <![CDATA[$F{subjectName}]]>
                  </seriesExpression>
            
                  <categoryExpression>
                     <![CDATA[$F{subjectName}]]>
                  </categoryExpression>
            
                  <valueExpression>
                     <![CDATA[$F{marks}]]>
                  </valueExpression>

               </categorySeries>
            </categoryDataset>
      
            <barPlot isShowTickMarks = "false">
               <plot/>
            </barPlot>
         </barChart>
      
      </band>
   </pageHeader>
   
   <columnHeader>
      <band height = "20" splitType = "Stretch"/>
   </columnHeader>
   
   <detail>
      <band height = "20" splitType = "Stretch"/>
   </detail>
   
   <columnFooter>
      <band height = "20" splitType = "Stretch"/>
   </columnFooter>
   
   <pageFooter>
      <band height = "20" splitType = "Stretch"/>
   </pageFooter>
   
   <summary>
      <band height = "400" splitType = "Stretch">
      
         <pieChart>
            <chart evaluationTime = "Report">
               <reportElement x = "135" y = "0" width = "270" height = "300"/>
            
               <chartTitle>
                  <titleExpression>
                     <![CDATA["My First JR Pie Chart"]]>
                  </titleExpression>
               </chartTitle>
            </chart>
         
            <pieDataset>
               <dataset incrementType = "None"/>
               
               <keyExpression>
                  <![CDATA[$F{subjectName}]]>
               </keyExpression>
            
               <valueExpression>
                  <![CDATA[$F{marks}]]>
               </valueExpression>
            </pieDataset>
            
            <piePlot>
               <plot/>
               <itemLabel/>
            </piePlot>
         </pieChart>
      
      </band>
   </summary>
	
</jasperReport>

上述檔案的詳細資訊如下所示:

  • 用於建立條形圖的 JRXML 元素是 </barChart>,位於 <pageHeader> 中。它包含一個 </chart> 子元素,該子元素包含一個 <reportElement> 子元素,用於定義圖表的尺寸和位置。

  • 條形圖中的 <dataset> 元素必須包含在 <categoryDataset> 和 </categoryDataset> JRXML 元素之間。

  • <categoryDataset> 必須包含一個 <categorySeries> 元素。此元素定義條形將表示什麼資料元素(在本例中為科目名稱)。

  • <categoryDataset> 還必須包含一個元素,該元素定義如何將資料分成幾類以進行比較。此處,資料按科目名稱分開。

  • <valueExpression> 元素定義使用什麼表示式來確定圖表中每個條形的值。在這裡,我們使用“marks”。

  • 對於餅圖,我們在 <summary> 部分使用了元素 <pieChart>。它包含一個 </chart> 子元素。

  • 子元素包含一個報表表示式,指示在圖表中使用什麼作為鍵。在這裡,我們使用了 subjectName。

  • 子元素包含一個用於計算鍵值的表示式。在這裡,我們使用了 marks。

報表填充的 Java 程式碼保持不變。檔案 C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\JasperReportFill.java 的內容如下所示:

package com.tutorialspoint;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

public class JasperReportFill {
   @SuppressWarnings("unchecked")
   public static void main(String[] args) {
      String sourceFileName = 
         "C://tools/jasperreports-5.0.1/test/jasper_report_template.jasper";

      DataBeanList DataBeanList = new DataBeanList();
      ArrayList<DataBean> dataList = DataBeanList.getDataBeanList();

      JRBeanCollectionDataSource beanColDataSource = new 
         JRBeanCollectionDataSource(dataList);

      Map parameters = new HashMap();

      try {
         JasperFillManager.fillReportToFile( sourceFileName,
            parameters, beanColDataSource);
      } catch (JRException e) {
         e.printStackTrace();
      }
   }
}

由於我們將顯示每門課程獲得的分數,因此需要更改 POJO。檔案 C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBean.java 的內容如下所示:

package com.tutorialspoint;

public class DataBean {
   private String subjectName;
   private Integer marks;

   public String getSubjectName() {
      return subjectName;
   }

   public void setSubjectName(String subjectName) {
      this.subjectName = subjectName;
   }

   public Integer getMarks() {
      return marks;
   }

   public void setMarks(Integer marks) {
      this.marks = marks;
   }

}

甚至檔案 C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBeanList.java 的內容也需要按如下所示更新:

package com.tutorialspoint;

import java.util.ArrayList;

public class DataBeanList {
   public ArrayList<DataBean> getDataBeanList() {
      ArrayList<DataBean> dataBeanList = new ArrayList<DataBean>();

      dataBeanList.add(produce("English", 58));
      dataBeanList.add(produce("SocialStudies", 68));
      dataBeanList.add(produce("Maths", 38));
      dataBeanList.add(produce("Hindi", 88));
      dataBeanList.add(produce("Scince", 78));
      
      return dataBeanList;
   }

   /*
    * This method returns a DataBean object, with subjectName ,
    * and marks set in it.
    */
   private DataBean produce(String subjectName, Integer marks) {
      DataBean dataBean = new DataBean();

      dataBean.setSubjectName(subjectName);
      dataBean.setMarks(marks);

      return dataBean;
   }
}

報表生成

接下來,讓我們使用常規的 ANT 構建過程編譯並執行上述檔案。檔案 build.xml(儲存在目錄 C:\tools\jasperreports-5.0.1\test 中)的內容如下所示。

匯入檔案 - baseBuild.xml 來自章節 環境設定,應放置在與 build.xml 相同的目錄中。

<?xml version = "1.0" encoding = "UTF-8"?>
<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" />
      </java>
   </target>
   
   <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" />
      </taskdef>
      
      <jrc destdir = ".">
         <src>
            <fileset dir = ".">
               <include name = "*.jrxml" />
            </fileset>
         </src>
			
         <classpath refid = "classpath" />
      </jrc>
   </target>

</project>

接下來,讓我們開啟命令列視窗並轉到放置 build.xml 的目錄。最後,執行命令 ant -Dmain-class=com.tutorialspoint.JasperReportFill(viewFullReport 是預設目標)如下所示:

C:\tools\jasperreports-5.0.1\test>ant -Dmain-class=com.tutorialspoint.JasperReportFill
Buildfile: C:\tools\jasperreports-5.0.1\test\build.xml

clean-sample:
   [delete] Deleting directory C:\tools\jasperreports-5.0.1\test\classes
   [delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jasper
   [delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrprint

compile:
   [mkdir] Created dir: C:\tools\jasperreports-5.0.1\test\classes
   [javac] C:\tools\jasperreports-5.0.1\test\baseBuild.xml:28:
   warning: 'includeantruntime' was not set, defaulting to bu
   [javac] Compiling 3 source files to C:\tools\jasperreports-5.0.1\test\classes

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

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

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

BUILD SUCCESSFUL
Total time: 19 minutes 45 seconds

作為上述編譯的結果,將開啟一個 JasperViewer 視窗,如下面的螢幕所示:

Jasper Bar  Chart Example

Jasper Pie Chart Example

在這裡,我們看到條形圖是在 pageheader 中建立的,餅圖是在 summary 部分建立的。

廣告