2010-09-13 124 views
4

我正在使用iReport工具與JasperReports 1.3.4結合使用。如何將jasper文件路徑傳遞給子報表子報表

我有一個主報告,其中包含兩個子報表。其中一個子報表具有嵌入式子報表。所有.jasper文件都駐留在同一個目錄中。

iReport生成了名爲SUBREPORT_DIR的參數。 subreportExpression表示子報告文件名爲![CDATA[$P{SUBREPORT_DIR} + "subreport.jasper"]

從iReport內生成報告時,一切正常。但是,我正在嘗試使用一個小型Java Web應用程序來生成報告。我通過"SUBREPORT_DIR"參數JasperFillManager.fillReport(String sourceFileName, Map parameters, JRBeanCollectionDatasource)。此SUBREPORT_DIR設置爲主報告所在的目錄。

fillReport拋出異常:

net.sf.jasperreports.engine.JRException: Could not load object from location : 
    .sub-subreport.jasper. 

看來,第一子報表試圖處理其subreport(embedded subreport),但SUBREPORT_DIR沒有得到解決,或者使用得當生成子報表的名稱。

有什麼我失蹤了嗎?應如何處理這種情況?

+0

從異常消息似乎你正在使用「」作爲SUBREPORT_DIR參數。如果是這樣,請嘗試使用「./」或「」。 – 2010-09-13 19:58:28

+0

在哪裏放「./」?我很困惑 – Manu 2010-09-14 06:55:26

+0

現在我想你正在使用: parameters.put(「SUBREPORT_DIR」,「。」); JasperFillManager.fillReport(String sourceFileName,Map parameters,JRBeanCollectionDatasource); 嘗試使用: parameters.put(「SUBREPORT_DIR」,「」); – 2010-09-14 08:00:25

回答

5

單擊Subreport1,轉到properties tab -> Subreport properties -> Parameters

你會把你的 'MasterReport' SUBREPORT_DIR參數作爲參數傳遞給 'Subreport1'。 創建該條目:

名稱:SUBREPORT_DIR 表達:$P{SUBREPORT_DIR}

不要忘了重新編譯您的報告,並確保重新發布的Web應用程序的應用服務器。

4

我有同樣的問題,並將SUBREPORT_DIR設置爲包含我的報告的完整軟件包名稱。

例如:

「COM/mycomp/MYAPP /報告/」

我們設置窗口是,你必須在同一個目錄中的所有報告中的相似。區別在於我正在從桌面(Java SE)運行我的應用程序。但是,我的報告位於jar文件中。當我嘗試將SUBREPORT_DIR設置爲c:\ path \ to \ app \ myapp.jar!\ com \ mycomp \ myapp \ reports時,Jasper無法找到該文件。

希望這會有所幫助。

2

作爲Marcio already explained,您的SUBREPORT_DIR參數必須從調用報告傳遞到子報表。 使用../的相對路徑不可靠,絕對路徑始終偏好。

所以,你必須在你的JRXML文件中寫入:

<subreport isUsingCache="false"> 
    <subreportParameter name="SUBREPORT_DIR"> 
     <subreportParameterExpression><![CDATA[$P{SUBREPORT_DIR}]]></subreportParameterExpression> 
    </subreportParameter> 
    <subreportExpression class="java.lang.String"><![CDATA[$P{SUBREPORT_DIR} + "mySubreport.jasper"]]></subreportExpression> 
</subreport> 

你必須與$P{SUBREPORT_DIR}通過subreportParameterExpression,elswise也不會傳遞參數(僅設置<subreportParameter name="SUBREPORT_DIR"/>是不夠的)。

0

剛剛成立$P{SUBREPORT_DIR}作爲提示,並通過你的價值(該目錄路徑可能不 有效像c:\something.jasper代替c:\\something.jasper

相關問題