gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:42:21 25 4
gpt4 key购买 nike

我的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">
...

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

关于java - 当主报表查询有多个结果集并且子报表作为参数输入时无法生成PDF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52848712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com