是否可以使用iReport / JasperReports在XML文件中绘制CSV字段?
我有一个XML文件,其中一个字段如下所示:
<values>48,59,59,58,53,53,52,55,50,52,54,56,57,59,60,57,56,55,58,62</values>
如何使用这些数字创建情节?或者我如何使用这些数字来创建可以在绘图中使用的子数据集?
UPDATE :我创建了一个String []变量,其变量表达式如下:
<variableExpression><![CDATA[$F{values}.split(",")]]></variableExpression>
所以现在我有一个字符串数组,但我仍然找不到绘制它的方法。任何想法?
这家伙也有这个问题,没有人回答他:building a Chart with an Array
UPDATE2 :现在String []已转换为Arrays.asList($F{values}.split(","))
的列表。但我不知道在图表系列中我可以使用什么作为类别表达式:
答案 0 :(得分:1)
实现您自己的JrDataSource,它将处理您的csv值并使用子数据源为您的绘图添加
<dataSourceExpression><![CDATA[new YourDataSource(${$F{values}})]></dataSourceExpression>
答案 1 :(得分:0)
正如@josefprochazka指出的那样,解决方案是创建一个Custom DataSource并将其传递给子报告。但我不是JasperReports专家,创建自定义数据源花了我一段时间。所以这是解决方案,代码和&amp;教程。我将分三步进行划分:
implements JRDataSource
(这将是您的自定义数据源)的类所以,一旦你知道怎么做,第一步就不那么难了。我使用了以下教程:http://community.jaspersoft.com/wiki/building-custom-datasource-yahoo-finance-data
基本上你要做的就是实现两种方法:getFieldValue(JRField f)
和next()
。以下是使用3个字段的完整示例:http://pastebin.com/jX0wJVGi
完成该类后,使用它创建一个.jar并将其添加到项目类路径中。
在iReport中,转到工具 - >选项,选择“ Classpath ”选项卡并在那里添加jar。
如果您在那里使用JasperReports,那么在Eclipse中也是如此。
最后,我们将在报告中实例化自定义DS:
<subreport>
<reportElement uuid="52f64c56-b410-45a7-b391-828ef35e0103" positionType="Float" x="0" y="245" width="555" height="32"/>
<dataSourceExpression><![CDATA[new com.dbelectronics.BandasCSVDatasource($F{csv_field1},$F{csv_field2})]]></dataSourceExpression>
<subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "your_subreport.jasper"]]></subreportExpression>
</subreport>
正如您所看到的,我使用两个参数调用BandasCSVDatasource
,每个参数包含一个由逗号分隔的20个数字的字符串。
好吧,现在你只需要创建子报告并映射字段:
<queryString>
<![CDATA[]]>
</queryString>
<field name="Verificacion" class="java.lang.String"/>
<field name="Calibracion" class="java.lang.String"/>
<field name="Banda" class="java.lang.String"/>
然后添加图表并使用其中的字段:
希望它有所帮助。再次感谢约瑟夫。