2010-10-26 135 views
8

我想在Jasper報告填寫編譯報告時給用戶提供進度。 基本上我想獲得進步,而這是執行:填寫碧玉報告時的進度

JasperFillManager.fillReport(RPT的JasperReport,地圖參數,可以的JRDataSource SRC)

反正有沒有做到這一點?

+1

我們正在使用AsynchronousFillHandle和AsynchronousFilllListener,其中填充發生在另一個線程上。這使我們能夠顯示我們自己的進度條,並具有取消的能力。不幸的是,聽衆沒有給出真正的進度指示,只是通知完成或錯誤,所以進度條是一個「無限」的。 – yshalbar 2010-10-26 07:42:46

+0

我們已經在RCP/SWT/JFace應用程序中使用作業框架來實現這一點。我們也沒有真正的進展。它很奇怪,因爲導出到文件時有可用的進度。我想知道是誰容易爲賈斯珀貢獻...... – Craig 2010-10-27 19:35:36

回答

0

我使用這個組件從PrimeFaces表明報表生成:

<p:ajaxStatus onstart="dlg.show();" onsuccess="dlg.hide();" /> 
     <p:dialog modal="true" header="Creating Report" widgetVar="dlg" draggable="false" closable="false" > 
      <p:graphicImage value="/resources/images/ajaxloadingbar.gif" /> 
     </p:dialog> 

我沒有任何實際的方式來確定的總時間我的報告,將採取編譯和填充,所以我選擇不使用在報告完成之前有時填寫的實際進度欄。

+0

我在想,正確的報告生成進度仍必須在賈斯珀報告中正確實施,並暴露給客戶。 – Craig 2011-01-21 06:46:36

0

恐怕無法監測填寫碧玉報告的進度(截至版本4.0.2) - net.sf.jasperreports.engine.fill.JRFiller不提供任何種類的進度通知。

2

從碧玉報告版本4.6.0您可以使用FillListener

AsynchronousFillHandle handle = AsynchronousFillHandle.createHandle(jasperReport, params, dataSource); 
handle.addFillListener(new FillListener() { 

    @Override 
    public void pageUpdated(JasperPrint jasperPrint, int pageIndex) { 
     log.info("pageUpdated " + pageIndex); 
    } 

    @Override 
    public void pageGenerated(JasperPrint jasperPrint, int pageIndex) { 
     log.info("pageGenerated " + pageIndex); 
    } 
}); 

注意:打造4.6.0版本得到SVN來源和使用ant:

svn co http://jasperforge.org/svn/repos/jasperreports (user/pass: anonymous) 
cd jasperreports\trunk\jasperreports 
ant jar 
+0

現在它可以作爲jasperreports-4.7.0.jar的一部分 – Cid 2012-07-19 05:06:32