我正在使用ColdFusion Report Builder for CF9并尝试将图表作为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报表生成器中,我已经定义了一个名为chartImage
的输入参数,并将其设置为BLOB
的类型(也尝试了类型Image
),完全遵循these instructions。
我收到此错误但未能克服错误:
报告数据绑定错误不兼容[分配给参数的B值 ColdFusionReport数据集中的chartImage ..
我还将参数类型更改为String
,在base-64字符串中传递,然后在报告中将其转换为二进制,但是在[B
的无效消息中引发错误
如何将此图像作为输入参数正确绑定?
答案 0 :(得分: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的任何内容都不是特别优雅。
答案 1 :(得分:0)
我知道这已经很老了,并且不建议使用CF Report Builder。但是,我最近不得不想出一个解决方案。 CF Report Builder的image参数不喜欢字节数组,Coldfusion自己的图像类或imageGetBlob()的结果(尽管其中一个选项被称为blob)。
它看起来确实很喜欢Java ByteArrayInputStream。我做了以下工作,对我有用。
createObject("java", "java.io.ByteArrayInputStream").init(chartImage.getImageBytes('png'))