我正在使用ColdFusion报表生成器作为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>在Image中,我定义了一个名为chartImage的输入参数,并将其设置为BLOB类型(也尝试了Image类型),完全跟随这些指示。
我收到了这个错误,一直无法克服它:
报告不兼容的数据绑定错误[分配给ColdFusionReport数据集中参数ColdFusionReport的B值。
我还将参数类型更改为String,传入一个基-64字符串,然后在报表中将其转换为二进制,但这会引发一个错误,其中包含[B的无用消息。
如何使此图像作为输入参数正确绑定?
发布于 2013-07-08 16:41:19
我想,对这个问题缺乏兴趣说明了CF报表生成器的流行。虽然我无法克服绑定错误,但我确实找到了一个合理的解决办法。
不是将图像直接绑定为二进制值,而是将图表图像写入临时目录,然后将该路径作为字符串参数传递到报表中。然后,报表可以从文件系统中找到图像,并将其附加到报表中,而不会出现任何问题。一旦报告运行,我删除图表从文件系统,以确保一切保持良好和整洁。
下面是使用此解决方案更新的代码:
<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报表生成器没有什么特别优雅的。
发布于 2020-10-21 15:33:08
我知道这是非常古老的,CF报表生成器被废弃了。然而,我最近不得不想出一个解决办法。的图像参数不喜欢字节数组、Cold聚变自己的映像类或imageGetBlob()的结果(尽管其中一个选项被称为blob)。
它真正喜欢的是一个Java ByteArrayInputStream。我做了下面的事,这对我来说很管用。
createObject("java", "java.io.ByteArrayInputStream").init(chartImage.getImageBytes('png'))https://stackoverflow.com/questions/17476966
复制相似问题