1

是否可以使用 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>

我怎样才能使用这些数字来创建一个情节?或者我如何使用这些数字来创建可用于绘图的子数据集?


更新:我创建了一个 String[] 变量,具有以下变量表达式:

<variableExpression><![CDATA[$F{values}.split(",")]]></variableExpression>

所以现在我有一个字符串数组,但我仍然找不到绘制它的方法。有任何想法吗?
这家伙也有这个问题,没有人回答他:用数组构建图表


UPDATE2:现在 String[] 已转换为带有Arrays.asList($F{values}.split(",")). 但我不知道我可以在图表系列中使用什么作为类别表达式:

在此处输入图像描述

4

2 回答 2

1

实现您自己的 JrDataSource 它将处理您的 csv 值并将子报表与此数据源一起用于您的绘图

<dataSourceExpression><![CDATA[new YourDataSource(${$F{values}})]></dataSourceExpression>
于 2013-06-21T07:04:03.777 回答
0

正如@josefprochazka 指出的那样,解决方案是创建一个自定义数据源并将其传递给子报告。但我不是 JasperReports 专家,创建自定义数据源花了我一段时间。所以这是解决方案,带有代码和教程。我将它分为3个步骤:

  1. 您必须创建一个 *.jar 包含一个类implements JRDataSource(这将是您的自定义数据源)
  2. 将该 jar 添加到您的 Java 项目和/或 iReport
  3. 在 iReport/jrxml 创建自定义数据源的实例并将其传递给子报表

所以,一旦你知道如何去做,第一步并不难。我使用了以下教程: http: //community.jaspersoft.com/wiki/building-custom-datasource-yahoo-finance-data
基本上你要做的是实现两种方法:getFieldValue(JRField f)next()。这是一个使用 3 个字段的完整示例:http://pastebin.com/jX0wJVGi
完成该类后,使用它创建一个 .jar 并将其添加到您的项目类路径中。在 iReport 中转到Tools->Options,选择“ 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"/>

然后添加一个图表并使用那里的字段:示例图表系列

希望能帮助到你。再次感谢约瑟夫。

于 2013-06-21T09:53:08.333 回答