iReport:使用子报表编译报表时出错

时间:2009-09-07 15:15:53

标签: jasper-reports ireport

以下.jrxml:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="DTC-Campaigns-Block-Campaigns-Helper-Campaigns" language="groovy" pageWidth="794" pageHeight="450" orientation="Landscape" columnWidth="794" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0">
    <queryString><![CDATA[SELECT 1;]]></queryString>
    <detail>
        <band height="50" splitType="Stretch">
            <subreport>
                <reportElement x="0" y="0" width="794" height="25"/>
                <subreportExpression class="java.lang.String"><![CDATA["./test.jasper"]]></subreportExpression>
            </subreport>
        </band>
    </detail>
</jasperReport>

不会在iReport 3.6.0中编译:

Compiling to file... /home/dominik/workspace/project1/reporting/MyFile.jasper
Compiling subreports....
Unable to locate the subreport with expression: "$P{SUBREPORT_DIR} + "test.jasper"".

即使将SUBREPORT_DIR修改为./也无济于事,也不会在主报告之前手动编译test.jrxml

有什么想法吗?

7 个答案:

答案 0 :(得分:1)

在jrxml提取中,您没有指定SUBREPORT_DIR是String参数...您可以添加此信息。

我还注意到version 3.5.2 and 3.5.3之间行为的变化 版本3.5.3的更改日志说:

  

自动编译子报告

因此,参数化子报告路径似乎不再起作用了...... (但我记得收到警告,而不是失败)。

你试过了吗?

  • 仅编译子报表(使用iReport)。 [预览将生成jasper文件,这是jrxml的编译版本]
  • 使用jrxml文件(而不是jasper文件)$P{SUBREPORT_DIR} + "test.jrxml"给出表达式,并且根本没有参数(如"test.jrxml" - 您的子报表需要位于同一本地目录中你的主要报告)

答案 1 :(得分:0)

您无法确定当前目录并将其作为参数传递吗?我就是这样做的,而且效果很好。如果要将Jasper Reports集成到代码中,您甚至可以使用一些代码来获取Java中当前目录的完整路径,并通过HashMap传递它。

答案 2 :(得分:0)

要解决此问题,您必须在$ P {SUBREPORT_DIR}中设置绝对路径。

可以在属性窗口中的iReport中,在“默认值表达式”属性中完成。

有关更好的说明,请参阅:http://jasperforge.org/plugins/espforum/view.php?group_id=83&forumid=101&topicid=62793

答案 3 :(得分:0)

您不需要在子报表中包含SUBREPORT_DIR ...只要supreport与主报表中的目录相同...就没有问题了......预览jrxml文件时会发生编译...

答案 4 :(得分:0)

JasperReports的新版本不再出现问题(至少在我的情况下不是这样)。

答案 5 :(得分:0)

在我的情况下:在我添加的属性编辑器的属性Subreport Expression中,PARAMETER SUBREPORT_DIR/得到类似的内容:

$P{SUBREPORT_DIR} + "/InvoiceDetail.jasper"

答案 6 :(得分:0)

我正在使用iReport版本3.7.3

可以通过两种方式解决问题:

1.将参数SUBREPORT_DIR的值分配给变量并使用变量代替参数,如:

$V{path} + "InvoiceDetail.jasper"

确保将“变量表达式”设置为$ P {SUBREPORT_DIR}

2.将参数SUBREPORT_DIR的'默认值表达式'设置为$ P {SUBREPORT_DIR},并将其用作:

$P{SUBREPORT_DIR} + "InvoiceDetail.jasper"