開發(fā)一個(gè)Jasperreport報(bào)表,我們需要下載IReport之類Jasperreport報(bào)表開發(fā)工具,其下載地址如下:http://community.jaspersoft.com/project/ireport-designer,關(guān)于如何利用IReport來開發(fā)一個(gè)報(bào)表,這個(gè)已超出BDF2范疇,關(guān)于IReport的使用,網(wǎng)上教程很好,大家可以去搜索一下。
報(bào)表設(shè)計(jì)完成之后,接下來需要將其編譯成一個(gè)jasper文件,這個(gè)利用IReport就可以完成,有了jasper文件后,我們就可以將其在線上傳到BDF2中提供的報(bào)表維護(hù)當(dāng)中,如下圖所示:

在上傳報(bào)表文件時(shí),如果我們選擇非jasper報(bào)表文件,系統(tǒng)會(huì)拋出一個(gè)異常,同時(shí)上傳好報(bào)表之后,我們還可以選擇當(dāng)前報(bào)表采用的數(shù)據(jù)源,目前在BDF2當(dāng)中,允許用戶為報(bào)表提供三種類型的數(shù)據(jù)源:第一種就是JDBC,這種方式也是最為常用的一種,選擇這種之后,我們就可以在下面的數(shù)據(jù)源選擇當(dāng)中選擇當(dāng)前報(bào)表要采用的數(shù)據(jù)源名稱(來自BDF2所支持的多數(shù)據(jù)源機(jī)制);第二種和第三種分別是Map與JavaBean,一旦我們選擇這兩種類型的數(shù)據(jù)源,那么在下面的數(shù)據(jù)來源選擇的列表當(dāng)中,我們只能選擇所有實(shí)現(xiàn)了IReportDataProvider接口且配置到Spring當(dāng)中的bean來作為當(dāng)前報(bào)表的數(shù)據(jù)源,IReportDataProvider接口代碼如下:
IReportDataProvider接口源碼
package com.bstek.bdf2.jasperreports.service;
import java.util.Collection;
/**
* @author Jacky.gao
* @since 2013-5-12
*/
public interface IReportDataProvider {
Collection<?> getData();
}
可以看到接口非常簡單,只有一個(gè)方法,這個(gè)方法只要求我們返回一個(gè)對象的集合即可,目前這個(gè)對象可以同Map或JavaBean。如果我們在配置時(shí)采用的數(shù)據(jù)源類型為Map,那要求對應(yīng)的getData方法返回的必須是一個(gè)Map的集合,如果選擇的是JavaBean則必須返回一個(gè)包含報(bào)表中使用的field的JavaBean的集合,比較容易理解。
報(bào)表定義完成之后,我們可以點(diǎn)擊工具欄上的“預(yù)覽報(bào)表”按鈕,在彈出的窗口當(dāng)中,可以選擇要預(yù)覽的報(bào)表類型,可以看到目前支持下面幾種類型的報(bào)表:

對于報(bào)表的預(yù)覽,你可以選擇jrpxml或html兩種類型格式。HTML格式比較簡單,就是將報(bào)表內(nèi)容轉(zhuǎn)換成一個(gè)HTML網(wǎng)頁,可以在線顯示;而對于jrpxml,它會(huì)將報(bào)表內(nèi)容生成一個(gè)XML格式,這里需要特別指出的是,我們提供了一個(gè)可以解析這個(gè)XML的swf,解析好的內(nèi)容可以保證與報(bào)表完成一致,并可以實(shí)現(xiàn)在網(wǎng)頁當(dāng)中直接顯示。同時(shí)在這個(gè)SWF當(dāng)中,我們還提供了一個(gè)打印功能,可以將當(dāng)前顯示的報(bào)表直接輸出到打印機(jī)打印,如下圖所示:

利用這個(gè)SWF打印的時(shí)候,它不會(huì)打印圖片,所以如果您的報(bào)表當(dāng)中含有圖片,利用這個(gè)SWF打印功能是不會(huì)被打印出來的,但就因?yàn)槠洳粫?huì)打印圖片,所以我們可以利用這個(gè)功能實(shí)現(xiàn)套打,具體大家可以想象一下。
實(shí)際上,對于上面的報(bào)表的右上角,是有一張圖片的,但因?yàn)槲覀儧]有定義圖片,所以顯示的報(bào)表右上角是空的,下面這張圖向我們展示了定義這個(gè)報(bào)表時(shí)圖片的定義方式:

可以看到,在設(shè)計(jì)報(bào)表時(shí),對于用到的圖片,我們采用一個(gè)parameter來代替,這個(gè)parameter的名字為IMGJERRY,所以在將報(bào)表配置到BDF2當(dāng)中時(shí),我們需要將要采用的目標(biāo)圖片作上傳到系統(tǒng)當(dāng)中,并且將其名字命名為IMGJERRY,這樣我們的報(bào)表生成時(shí)就可以看到圖片啦,如下圖所示:

更多建議: