0

我正在使用适用于 CF9 的 ColdFusion Report Builder 并尝试将图表作为 PNG 图像传递到报告中。这是我的 CFML 代码:

<cfchart format="png" name="chartImage">
    <cfchartseries type="bar" query="chart" itemcolumn="title" valuecolumn="level">
</cfchart>
<cfreport format="pdf" template="report.cfr" name="grid">
    <cfreportparam name="reportTitle" value="#reportType.title#">
    <cfreportparam name="chartImage" value="#chartImage#">
</cfreport>

在 CF Report Builder 中,我定义了一个名为 Input ParameterchartImage并将其设置为BLOB(也尝试过 type Image)的类型,完全按照这些说明进行操作。

我收到此错误并且无法克服它:

报表数据绑定错误不兼容[B值分配给ColdFusionReport数据集中的参数chartImage..

我还将参数类型更改为String,传入 base-64 字符串,然后在报告中将其转换为二进制,但这会引发错误,并显示无帮助的消息[B

如何让此图像正确绑定为输入参数?

4

2 回答 2

0

我想对这个问题缺乏兴趣说明了 CF Report Builder 的受欢迎程度。虽然我无法克服绑定错误,但我确实找到了一个合理的解决方法。

我没有将图像直接绑定为二进制值,而是将图表图像写入临时目录,然后将该路径作为字符串参数传递到报告中。然后报告可以从文件系统中找到图像并将其附加到报告中而不会遇到任何麻烦。运行报告后,我会从文件系统中删除图表,以确保一切都保持整洁。

这是此解决方案的更新代码:

<cfchart format="png" name="chartImage">
    <cfchartseries type="bar" query="chart" itemcolumn="title" valuecolumn="level">
</cfchart>

<cfset chartImageFile = getTempDirectory() & '\' & createUUID()>
<cfset fileWrite(chartImageFile, chartImage)>

<cfreport format="pdf" template="report.cfr" name="grid">
    <cfreportparam name="reportTitle" value="#reportType.title#">
    <cfreportparam name="chartImage" value="#chartImageFile#">
</cfreport>

<cfset fileDelete(chartImageFile)>

它不是很优雅,但 CF Report Builder 没有什么特别优雅的。

于 2013-07-08T16:41:19.370 回答
0

我知道这已经很老了,而且 CF Report Builder 已被弃用。但是,我最近不得不想出一个解决方案。CF Report Builder 的图像参数不喜欢字节数组、Coldfusion 自己的图像类或 imageGetBlob() 的结果(尽管其中一个选项被称为 blob)。

它看起来像一个Java ByteArrayInputStream。我做了以下事情,它对我有用。

createObject("java", "java.io.ByteArrayInputStream").init(chartImage.getImageBytes('png'))
于 2020-10-21T15:33:08.687 回答