【问题标题】:How to change JRBaseSubreport expression with JasperReports API如何使用 JasperReports API 更改 JRBaseSubreport 表达式
【发布时间】:2012-10-13 17:09:41
【问题描述】:

我通过 PHP/Java Bridge 使用 JasperReports API。这意味着 PHP 端与 Java 端位于另一台机器上,并且这两个端不共享相同的文件系统。

要加载报告,我必须读取 PHP 中的 .jasper 文件并将其转换为 java.io.InputStream 实例并加载它使用 net.sf.jasperreports.engine.util.JRLoader::loadObject 静态方法。

所以一切正常,直到我的报告 subreports 引用了 Java 端无权访问的文件。所以我的解决方案是访问所有 subreports(使用 net.sf.jasperreports.engine.util.JRElementsVisitor 类),评估 subreport 表达式,使用与主报告,但它在主报告的参数中。

然后,这是我的问题,我不知道如何更改 JRBaseSubreport 表达式以指向新添加的参数。

所以我的问题是,如何更改 JRBaseSubreport 表达式?

【问题讨论】:

    标签: java jasper-reports subreport php-java-bridge


    【解决方案1】:

    我不确定这是否是您的意思,但您实际上可以将 JRXML 中子报表的定义从使用 String 更改为使用 net.sf.jasperreports.engine.JasperReport

    例如,当您添加子报表时,它通常会在您的报表中添加以下参数:

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

    对于子报表元素本身,它会添加如下内容:

    <subreport>
      <reportElement uuid="64d21a88-9389-49f5-ba63-1f33aac5a39f" x="821" y="0" width="200" height="100"/>
      <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
      <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "report4_subreport1.jasper"]]></subreportExpression>
    </subreport>
    

    而不是将 SUBREPORT_DIR 传递给已编译的 JasperReport 对象。因此,将您的参数更改为:

    <parameter name="SUBREPORT" class="net.sf.jasperreports.engine.JasperReport" isForPrompting="false"/>
    

    然后是子报表元素:

    <subreport>
      <reportElement uuid="64d21a88-9389-49f5-ba63-1f33aac5a39f" x="821" y="0" width="200" height="100"/>
      <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
      <subreportExpression><![CDATA[$P{SUBREPORT}]]></subreportExpression>
    </subreport>
    

    那么,您只需了解特定报告需要哪些子报告即可。

    注意:这确实有它没有在iReport 中运行的不幸副作用,但我通常只是在@987654332 中测试时将参数从JasperReport 交换到String 实例@ 绕过它。

    【讨论】:

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