【问题标题】:iReport: Error when compiling report with subreportiReport:使用子报表编译报表时出错
【发布时间】:2009-09-07 15:15:52
【问题描述】:

以下.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 也无济于事。

有什么想法吗?

【问题讨论】:

    标签: jasper-reports ireport


    【解决方案1】:

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

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

    自动编译子报表

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

    你试过了吗:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 好吧,我什至没有从我自己的 Java 应用程序中启动它,而是从 iReport 中启动它。
      • 您可以为参数设置一个默认值,并在必要时提示用户更改它。 Jasper 似乎设置为仅使用 full 路径,而不是您尝试的相对路径 (./foo)。相对路径更方便一些,但只有在集成到程序中时才应该是绝对必要的,无论如何您都可以从相对路径中确定完整路径。
      【解决方案3】:

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

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

      如需更好的解释,请参阅:http://jasperforge.org/plugins/espforum/view.php?group_id=83&forumid=101&topicid=62793

      【讨论】:

      • 但这只有在报表总是在同一个目录结构中编译时才有效。如果我在本地计算机上创建报告并将其移至服务器以供以后进一步处理怎么办?无论如何,现在我只是将所有源文件放在一个文件夹中。
      【解决方案4】:

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

      【讨论】:

      • 但是如果它们不在同一个目录中怎么办——这通常是更简洁的结构?
      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

        在我的例子中:在我添加的属性编辑器的属性Subreport Expression 中,参数SUBREPORT_DIR/ 得到类似:

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

        【讨论】:

          【解决方案7】:

          我使用的是 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"
          

          【讨论】:

            猜你喜欢
            • 2010-10-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多