如何将jasper文件路径传递给子报表的子报表

我正在使用iReport工具和JasperReports 1.3.4。

我有一个主报告,其中包含两个子报告。 其中一个子报表具有嵌入式子报表。 所有.jasper文件都驻留在同一目录中。

iReport生成了名为SUBREPORT_DIR的参数。 ![CDATA[$P{SUBREPORT_DIR} + "subreport.jasper"]将子报告文件名表示为![CDATA[$P{SUBREPORT_DIR} + "subreport.jasper"]

从iReport内部生成报告时,一切都很有效。 但是,我有一个小的Java Web应用程序,我试图用来生成报告。 我将"SUBREPORT_DIR"参数传递给JasperFillManager.fillReport(String sourceFileName, Map parameters, JRBeanCollectionDatasource) 。 此SUBREPORT_DIR设置为主报告所在的目录。

fillReport抛出exception:

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

看起来第一SUBREPORT_DIR报表正在尝试处理其subreport(embedded subreport) ,但SUBREPORT_DIR未被解析,或者未正确使用以生成子子报表的名称。

有什么我想念的吗? 该方案应该如何处理?

单击Subreport1 ,转到properties tab -> Subreport properties -> Parameters

您将’ MasterReport’SUBREPORT_DIR参数作为参数传递给’ Subreport1 ‘。 创建此条目:

名称: SUBREPORT_DIR表达式: $P{SUBREPORT_DIR}

不要忘记重新编译报告,并确保在应用程序服务器中重新发布您的Web应用程序。

我遇到了同样的问题,并将SUBREPORT_DIR设置为包含我的报告的完整包名。

例如:

“COM / mycomp / MYAPP /报告/”

我们的设置类似,因为您在同一目录中包含所有报告。 不同之处在于我从桌面运行我的应用程序(Java SE)。 但是,我的报告位于一个jar文件中。 当我尝试将SUBREPORT_DIR设置为c:\ path \ to \ app \ myapp.jar!\ com \ mycomp \ myapp \ reports时,Jasper无法找到该文件。

希望这可以帮助。

正如Marcio已经解释的那样 ,您的SUBREPORT_DIR参数必须从调用报告传递到子报告。 使用相对路径../不可靠,绝对的路径总是喜欢。

所以你必须在你的jrxml文件中写:

       

你必须使用$P{SUBREPORT_DIR}传递$P{SUBREPORT_DIR} ,elswise它不会传递参数(仅设置是不够的)。

只需将$P{SUBREPORT_DIR}为提示并传递您的值(该目录的路径可能无效,如c:\something.jasper而不是c:\\something.jasper