Java程式生成linechart report的方法

weixin_30639719發表於2020-04-05

iReport一般是一個設計階段的工具。用來設計出報表的排版和內容。報表的動態生成須要程式來實現(畢竟報表的資料是動態的,數量是非常多的,不可能用iReport Preview的方式一個個手工去生成)。

利用上一篇iReport5.6.0linechart製作方法http://blog.csdn.net/hbsong75/article/details/39992475)生成.jasper文件後。就能夠通過Java程式的方法來動態生成linechart報表了。

程式生成報表的要素主要是以下三點:

1.        iReport 通過parameters獲取資料;

1)        主報告Parameters新增resultsList 引數


這個引數接下來要用來接收從程式的MAP中傳過來的子資料集;

2)        子資料集(subDataSet)配置Parameter

在Summary band中選擇linechart元素,右鍵選擇“CharData“,在彈出的對話方塊中選擇”Parameters” tab 頁。在這裡我們將要配置怎樣從程式中接收子資料集的資料來源:

 

點選“Add”加入引數:

 

按上圖藍色數字編號依次配置好。這一步的關鍵是:$P{REPORT_PARAMETERS_MAP}.get("resultsList"),當中在後面的程式中傳遞資料來源的鍵值須要時“resultsList”,跟這裡的key值要一致,否則就獲取不到傳遞的資料了。

配置完畢後點選“CompileReport“,又一次生成.jasper檔案。

 

2.        呼叫JasperRunManager的幾個靜態方法,如runReportToPdf,runReportToHtmlFile等;

演示樣例程式例如以下:(TestBean.java參考上文)

package com.report.linechart;
 
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
 
public class TestReportGenerator {
    /**
     * @param args
     */
    public static void main(String[] args) {   
        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);    
        File reportFile = new File("D:\\workspace\\jasperreport\\linecharReport\\testLineReport.jasper");
        File reportPdfFile = new File("D:\\workspace\\jasperreport\\linecharReport\\testLineReport.pdf");
        Map<String,Object> parameters=new HashMap<String,Object>();
        JRBeanCollectionDataSource resultsList = new JRBeanCollectionDataSource(testBeans);
       
        parameters.put("resultsList", resultsList);
        parameters.put("reportTitle", "This is a test report");
        try {
            byte[] reportStream = JasperRunManager.runReportToPdf(reportFile.getPath(),parameters,new JREmptyDataSource());
            FileOutputStream fw = new FileOutputStream(reportPdfFile);
            fw.write(reportStream);
            fw.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

3.        通過iReport的Parameters關聯資料來源

能夠看到。resultsList是JRBeanCollectionDataSource型別,程式中通過 parameters.put("resultsList",resultsList),將linechart須要用到的TestBean資料集合進行了傳遞;相相應的,iReport的配置中$P{REPORT_PARAMETERS_MAP}.get("resultsList") 獲取了該資料集。

 

最後執行該測試程式,能夠發如今D:\workspace\jasperreport\linecharReport資料夾下生成了testLineReport.pdf檔案。開啟該PDF檔案,看到與在iReport中Preview的一致(測試資料一樣):

 

轉載於:https://www.cnblogs.com/yxwkf/p/5392717.html

相關文章