1

我需要将图像放入与数据库中的行匹配的 Jasper 报告中。我在专有存档文件中有图像数据,我可以很容易地在 Java 代码中提取这些数据。我需要知道如何将我的 Java 代码连接到 Jasper 报告以进行提取过程,例如 BIRT 的onRowSets()方法。(我需要有关填充过程如何工作的概述文档。)

如果我定义 POJO/bean 数据源,我也将无法轻松使用数据库。我可以在 XML 中嵌入必要的 Java 提取代码吗?Jasper Assistant 网站上的这个例子似乎表明我可以:

   <imageExpression class="java.io.File">
      <![CDATA[(new File($P{BaseDir}, "logo_"+$P{ReportCollector}+".gif").exists())
         ? 新文件($P{BaseDir}, "logo_"+$P{ReportCollector}+".gif")
         : 新文件($P{BaseDir}, "logo_BLANK.gif")]]>
   </imageExpression>

那个new File()实际上是嵌入在 XML 中的 Java 代码吗?我愿意编写代码,但我似乎找不到任何完整的类代码示例(我想我想要一个扩展图像对象之类的东西)。

4

1 回答 1

0

默认情况下,当前版本的 iReport (3.6.0) 使用 Groovy(一种 Java 脚本语言),它可以完全访问类路径中的任何 Java 库。

我所要做的就是编写一些代码来从存档中提取图像并返回一个 InputStream 对象(来自 ByteArrayInputStream)。然后我制作了一个 jar 文件并从 Jasper jrxml 文件中调用该函数,如下所示:

<imageExpression class="java.io.InputStream">
   <![CDATA[
com.mycompany.jasper.MyImageExtractor.getImage($F{IMAGE_URL}, $V{JasperVariable})
   ]]>
</imageExpression>

(您也可以使用 iReport GUI 链接到您的代码——将新图像的“图像表达式”属性设置为“CDATA”之后的行)

对于更简单的 Java 编码需求,您可以直接在报告的 XML 中编写简单的 Groovy 代码。

请注意,可以在 Groovy 中使用 Jasper 变量访问,$V{VariableName}并且可以使用$F{ColumnName}.

于 2009-09-09T22:17:30.130 回答