如何使用Jasper报表接口动态移除图表中的图例?
我有一个根据某些配置动态显示的图表,其中包括图例作为一个选项,因此如果未选中图例,我需要在图表中隐藏或删除图例。API中有没有可以做到这一点的函数?
发布于 2009-11-13 12:46:36
我认为JasperReport描述语法(组成jrxml文件的XML标记)不允许您这样做。
以下是带有图例的饼图说明(默认):
<pieChart>
<chart isShowLegend="true">
<reportElement x="19" y="18" width="518" height="196"/>
<chartTitle/>
<chartSubtitle/>
<chartLegend/>
</chart>
<pieDataset>
<keyExpression><![CDATA[$F{name}]]></keyExpression>
<valueExpression><![CDATA[$F{value}]]></valueExpression>
<labelExpression><![CDATA["<"+$F{name}+">"]]></labelExpression>
</pieDataset>
<piePlot>
<plot/>
<itemLabel color="#000000" backgroundColor="#FFFFFF"/>
</piePlot>
</pieChart>
下面是不带图例的图表:
<pieChart>
<chart isShowLegend="false">
<reportElement x="19" y="18" width="518" height="196"/>
<chartTitle/>
<chartSubtitle/>
<chartLegend/>
</chart>
<pieDataset>
<keyExpression><![CDATA[$F{name}]]></keyExpression>
<valueExpression><![CDATA[$F{value}]]></valueExpression>
<labelExpression><![CDATA["<"+$F{name}+">"]]></labelExpression>
</pieDataset>
<piePlot>
<plot/>
<itemLabel color="#000000" backgroundColor="#FFFFFF"/>
</piePlot>
</pieChart>
唯一的区别是图表标记中的isShowLegend属性。(您可以在iReport的图表属性面板中访问它)。
但此属性是一个值,您不能使用以下表达式:
$P{DISPLAY_LEGEND}.booleanValue();
其中,DISPLAY_LEGEND
将是报表的参数(类型为java.lang.Boolean)
如果你真的想要实现这样的事情,下面的技巧应该是有效的:
将你的图表定义为时间。一个有传奇,一个没有。图形应该重叠。(您可以通过直接在XML文本中复制相关的标记来完成此操作)
之后,编辑每个图表的print when expression属性,以便根据条件只打印两个图表中的一个。
这是我的DISPLAY_LEGEND
参数的结果示例。(但它也可以是另一个条件,也是经过计算的。重要的是这两个条件是对称的)
<pieChart>
<chart isShowLegend="true">
<reportElement x="19" y="18" width="518" height="196">
<printWhenExpression><![CDATA[$P{DISPLAY_LEGEND}]]></printWhenExpression>
</reportElement>
<!-- end of the chart definition-->
</chart>
<!-- pieDataset and piePlot-->
</pieChart>
<pieChart>
<chart isShowLegend="false">
<reportElement x="19" y="18" width="518" height="196">
<printWhenExpression><![CDATA[new Boolean(!$P{DISPLAY_LEGEND}.booleanValue())]]></printWhenExpression>
</reportElement>
<!-- end of the chart definition-->
</chart>
<!-- pieDataset and piePlot-->
</pieChart>
我还想提一下,您可以在报告生成期间访问JFreeChart对象。下面是一些论坛帖子,它们帮助我做到了这一点:
https://stackoverflow.com/questions/1705996
复制