2010-07-29 79 views
2

我正在使用iReport 3.5.0,並在主報表中使用子報表。我不想給出子報表表達式的絕對路徑,但是例如,如果我只是給「bpSubReport.jasper」作爲子報表表達式(因爲sub和main在同一個目錄中),那麼iReport可以找到bpSubReport.jasper並將主報告編譯到bPReport.jasper中,但是我的Java(gwt)應用程序不能。它拋出該異常子報表的相對路徑

net.sf.jasperreports.engine.JRException: Could not load object from location : bpSubReport.jasper

你能幫助我如何給子報表的相對路徑,讓Java應用程序。也找到它?謝謝。

回答

4

那麼我得到了答案。

你不能。您無法爲您的子報告使用相對路徑。您可能會嘗試在運行時編譯.jrxml文件,但相對路徑似乎不適用於具有外部服務器或文件系統的項目。

2

您可以使用:

Map paramater = new Hasmap(); 
paramater.put("SUBREPORT_DIR",source);// source is path your subreport 
0

把你所有的JRXML報告中的資源文件夾下(在類路徑)。創建

參數:

<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false"> 
     <defaultValueExpression><![CDATA["reports/"]]></defaultValueExpression> 
    </parameter> 

子報表元素創建:

<elementGroup> 
       <subreport> 
        <reportElement uuid="60c50685-03c7-452b-b37a-dda4a2092d18" positionType="Float" mode="Transparent" x="15" y="567" width="517" height="200" isRemoveLineWhenBlank="true" backcolor="#FFFFFF"/> 
        <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource(yourList)]]></dataSourceExpression> 
        <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "your_subreport.jasper"]]></subreportExpression> 
       </subreport> 
      </elementGroup>