開發步驟:
java
一、新建一個父報表parent_reportweb
在ireport designer左上角工具欄中點擊「文件」,下拉列表中選擇「New...",彈出以下對話框:
數據庫
默認選擇"Blank A4",點擊「Launch Report Wizard」,進入下圖:框架
爲報表文件命名,並選擇須要保存的路徑。點擊「下一步"。工具
接下來選擇Connections/Data Sources,若是沒有數據源則選擇」Empty datasource「。下一步。spa
下一步。插件
繼續下一步。開發
到這一步父報表文件便新建好了。get
二、引入subreportit
首先新建sub1_report,建立步驟參考上面。效果以下圖:
在「組件面板」中將Subreport組件拖入父報表中的detail中,會彈出以下窗口:
選擇建立好的子報表sub1_report,一直點擊「下一步」,完成。效果以下:
三、配置數據源:
我用過兩種數據源,一種是JDBC,一種是JavaBean。下面我分別來說:
<一>JDBC數據源配置
點擊工具欄」電插頭「圖標,以下圖
彈出以下窗口:
new一個datasource,以下圖有不少種datasource,這裏咱們選擇JDBC
next,進入數據庫信息配置,填好信息以後,test一下,沒問題save,JDBC數據源配置完成。
<二>配置JavaBean數據源
我在項目中用的是ZK框架,它集成了Jasperreport 插件,代碼以下:
public void onClick$printBtn() {
String subReportPath = getClass().getResource("/").getPath().replace("WEB-INF/classes", "invs/print");
String jasperUrl = "/invs/print/inv_check_report.jasper";
Div div_report = (Div) reportWin.getFellow("div_report");
reportWin.setVisible(true);
Jasperreport jasperreport = (Jasperreport) div_report.getFellow("report");
Map<String,Object> parameters = new HashMap<String,Object>();
parameters.put("SUBREPORT_DIR", subReportPath);
parameters.put("createdTime", DateUtil.getStrLong(checkVO.getCreatedTime()));
parameters.put("creatorName", checkVO.getCreatorName());
parameters.put("deptName", checkVO.getDeptName());
JRBeanCollectionDataSource usedDetailDs = new JRBeanCollectionDataSource(checkVO.getUsedDetailList()); //設置List數據源
JRBeanCollectionDataSource usedSummaryDs = new JRBeanCollectionDataSource(checkVO.getUsedSummaryList());
JRBeanCollectionDataSource stockDetailDs = new JRBeanCollectionDataSource(checkVO.getStockDetailList());
JRBeanCollectionDataSource stockSummaryDs = new JRBeanCollectionDataSource(checkVO.getStockSummaryList());
parameters.put("usedDetailDs", usedDetailDs);//這裏"usedDetailDs"和report中的parameter要對應
parameters.put("usedSummaryDs", usedSummaryDs);
parameters.put("stockDetailDs", stockDetailDs);
parameters.put("stockSummaryDs", stockSummaryDs);
jasperreport.setSrc(jasperUrl);
jasperreport.setParameters(parameters);
jasperreport.setType("pdf");
}
這裏javabean向Jasperreport中傳遞參數時,List類型的數據須要用JRBeanCollectionDataSource來進行封裝,同時在parameter屬性Class設置爲net.sf.jasperreports.engine.data.JRBeanCollectionDataSource,以下圖
同時,在這是subreport屬性時,Connection type選擇Use a datasource,Data Source Expression選擇對應從後臺傳過來的parameter。
四、常見問題
<一>pdf中文不顯示
須要設置顯示中文標籤的屬性:
pdf Font name is now deprecated:STSong-Light
pdf Encoding : UniGB-UCS2-H(China Simplified)
如圖
項目工程中須要引入這兩個包:iText和iTextAsian,注意,這兩個包要配套起來,報名應該以com.lowagie開頭,不要弄錯了哦。
這篇文章是對以前項目中用到的ireport技術的一個小總結,若是你們有什麼問題能夠留言或者加我QQ(1041211664).