天天看點

iReport5.6.0 linechart 制作方法

iReport 官網和文檔上關于chart設計以餅圖和JDBC源作為例子,但更多的情況下由于報表中的資料需要首先加工處理,是以更多的是從JavaBeans set datasource從擷取資料,另外linechart也是使用很多的一種chart工具,本文就記錄在iReport中通過JavaBeansset datasource 擷取資料,繼而生成linechart報表的過程。 

1.        下載下傳安裝iReport5.6.0

從 http://community.jaspersoft.com/project/ireport-designer/releases下載下傳安裝,此步略;

2.        報表制作

打開iReport

1)        生成模闆

依次選擇 檔案->New,選擇Blank A4,點選”Open thisTemplate”按鈕,如下圖:

iReport5.6.0 linechart 制作方法

 選擇報表路徑,輸入報表名稱:“testLineReport”,如下圖

iReport5.6.0 linechart 制作方法

繼續點“下一步”->“完成”。

2)        JavaBeans資料源準備

iReport中為了使用“JavaBeansset datasource”,需要指定一個工廠類,用以傳回一個包含javabeans的集合,例子程式中的工廠類名是“com.jaspersoft.ireport.examples.SampleJRDataSourceFactory”,其中需要一個靜态方法傳回Collection<Object> 這樣的資料結構。另外自然需要定義一個Javabean傳回具體的資料(包含set, get方法)。在我們的例子中,由于在linechart中需要用到subdataset,該subdataset需要從一個net.sf.jasperreports.engine.data.JRBeanCollectionDataSource中擷取資料,是以還需要多定義一個傳回這種資料類型的JavaBean。

綜上,我們定義的三個類依次如下:

表格 1 TestBean

package com.report.linechart;
                             
public class TestBean {
    public Stringcat;
    public int value;  
    public TestBean(){
    }  
    public String getCat(){
        returncat;
    }  
    public void setCat(String cat){
        this.cat = cat;
    }  
    public int getValue(){
        returnvalue;
    }  
    public void setValue(int value){
        this.value = value;
    }  
}
           

表格 2 TestReport

package com.report.linechart;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
public class TestReport {
    JRBeanCollectionDataSource resultsList;    
    public TestReport(){
    }  
    public JRBeanCollectionDataSource getResultsList(){
        returnresultsList;
    }  
    public void setResultsList(JRBeanCollectionDataSource resultsList){
        this.resultsList = resultsList;
    }
}
           

表格 3 TestFactory

package com.report.linechart;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Vector;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
public class TestFactory { 
    public static Collection<TestReport> getTestReports(){
        Collection<TestReport> testReports = new Vector<TestReport>();
        List<TestBean> testBeans = new ArrayList<TestBean>();
        TestBean tb1 = new TestBean();
        tb1.setCat("1");
        tb1.setValue(1);
        testBeans.add(tb1);
        TestBean tb2 = new TestBean();
        tb2.setCat("2");
        tb2.setValue(2);
        testBeans.add(tb2);    
        JRBeanCollectionDataSource resultsList = new JRBeanCollectionDataSource(testBeans);     
        TestReport tr = new TestReport();
        tr.setResultsList(resultsList);
        testReports.add(tr);       
        return testReports;
    }
}
           

注:上面需要着重注意的是TestReport這個bean傳回的資料類型是JRBeanCollectionDataSource,它可以作為一個資料源向linechart提供繪圖資料。

3)        編譯完成後,将上述生成的類加入到iReport的classpath下,以便iReport能夠找到它們,如下圖:

選擇“工具“-》”選項“

iReport5.6.0 linechart 制作方法

4)        設定 Report Datasources(工具條上一個插座一樣的圖示)

iReport5.6.0 linechart 制作方法

如上圖,依次選擇“ReportDatasources”-》“New”-》“JavaBeans set datasources” 

下一步,設定具體的類名和方法,如下圖:

iReport5.6.0 linechart 制作方法

注:注意類的全名和方法名要與建立的類完全一緻,通過“Test”按鈕可以測試一下,然後通過的話選擇“Save”按鈕。

在主視窗中,可以看到目前報表的datasource已經設定成 linechartDatasourceFactory了:

iReport5.6.0 linechart 制作方法

5)        報表設計

由于我們主要顔色linechart的設計方法,除了保留Titleband和 Summary band,删除其他的band。注意将linechart放置到 summary band中,如果放置在detail band中,資料源中有多條曲線的話就會分散在多個chart中,而不會顯示在一個chart中。

a)        Title band

Title band中我們簡單放置一個“StaticField”,顯示“Line char test”

b)        Summary band

我們從元件面闆拖一個Chart元素到“Summaryband”中,選擇“Line”類型,如下圖:

iReport5.6.0 linechart 制作方法

點選“OK”後進入”Categorychart wizard”,我們先不做設定,直接點選“完成”按鈕。

回到主視窗,我們現在的報表樣子如下:

iReport5.6.0 linechart 制作方法

c)        主資料源擷取

iReport5.6.0 linechart 制作方法

如上圖所示,點選“Preview”右邊的“Reportquery“圖示,選擇”JavaBean Datasource”,輸入com.report.linechart.TestReport,再點選”Read attributes”,然後将resultsList 加入到選擇的清單中,按“OK”确認。 

d)        子資料源

回到主視窗後,選擇“ReportInspector”根節點“testLineReport”,右鍵菜單選擇”Add Dataset“,設定如下:

iReport5.6.0 linechart 制作方法

下一步:(選擇先前設定的主資料源linecharDatasourceFactory)

iReport5.6.0 linechart 制作方法

以下先預設下一步直到完成。 

然後在主視窗 “Report Inspector”中找到節點“subDataSet”,右鍵菜單選擇”EditQuery“,同上選擇JavaBean Datasource,輸入TestBean的全路徑後讀出屬性cat和value加入選擇清單。

iReport5.6.0 linechart 制作方法

通過上述步驟,報表的主資料源和linechart的子資料源都已經關聯好了,下面設定linechart的Chart Data。 

e)        Chart Data設定

在報表視窗的Summary band中選中linechart元素,按右鍵在彈出菜單中選擇“Chart Data“,然後做如下設定:

iReport5.6.0 linechart 制作方法

在”Dataset” tab 頁中:

Sub dataset選擇上面定義的“subDataSet”;在”Connection/Datasource exp”總選擇 use datasourceexpression,然後輸入“$F(resultsList)”作為子資料源擷取資料的來源,而 resultsList正是我們定義的JRBeanCollectionDataSource類型的資料源。

在“Detail” tab頁中:

我們選擇加入兩條曲線的資料,“Series expression”用來區分曲線,”Category expression”是橫坐标,”Value expression”是縱坐标

iReport5.6.0 linechart 制作方法
iReport5.6.0 linechart 制作方法

         到此,生成linechart的配置全部結束。

3.        運作Preview的效果如下:

iReport5.6.0 linechart 制作方法

繼續閱讀