0

我的 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>
4

1 回答 1

1

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

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

<subreport isUsingCache="true">
    ...

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

于 2018-10-18T13:54:36.527 回答