当主报表查询有多个结果集且子报表输入作为参数时无法生成PDF?

When main report query have multiple results sets and subreport input as parameter could not generate PDF?

我的 JasperReports 报表有子报表。使用ByteArrayInputStream参数进入主报表,主报表查询结果多行无法生成pdf。但是主报表查询结果集只有一个结果集PDF生成没有报错

我的Java传递子报表的代码:

Map<String, Object> parameters = new HashMap<String, Object>(); 
parameters.put("subreportParameter", subreportinputstream)

参数声明在jrxml:

<parameter name="subreportParameter" class="java.io.ByteArrayInputStream"/>

这就是我调用子报表的方式:

 <subreport>
   <reportElement positionType="Float" x="275" y="55" width="240" height="70" uuid="0010fc8e-593e-45ee-af10-952fd8b54ad5" />
   <subreportParameter name="reportid">
      <subreportParameterExpression><![CDATA[$P{reportid}]]></subreportParameterExpression>
   </subreportParameter>
   <subreportParameter name="currencycode">
      <subreportParameterExpression><![CDATA[$P{currencycode}]]></subreportParameterExpression>
   </subreportParameter>
   <subreportParameter name="taxcode">
      <subreportParameterExpression><![CDATA[$P{taxcode}]]></subreportParameterExpression>
   </subreportParameter>
   <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
   <subreportExpression class="net.sf.jasperreports.engine.JasperReport"><![CDATA[$P{subreportParameter}]]></subreportExpression>
</subreport>

当子报表第二次呈现时,它会尝试从 $P{subreportParameter} 输入流加载报表,但是该流已经在第一次呈现子报表时被读取,因此再次读取它不会产生任何数据。

解决此问题的最简单方法是为子报表设置 isUsingCache 标志:

<subreport isUsingCache="true">
    ...

或者,您可以自己从流中加载 JasperReport 对象,方法是 JRLoader.loadObject(subreportinputstream) 并将 JasperReport 对象作为报告参数而不是流传递。