从RDLC报告

时间:2017-02-03 09:06:32

标签: c# image base64 rdlc dynamic-rdlc-generation

我试图在RDLC报告中使用参数(@CustomerSign)显示图像(base64字符串)(我从报告中呈现PDF文件,我看到了PDF文件)

我已经配置了如下图像属性:

选择图像来源:Database
使用此字段:

=Convert.FromBase64String(Parameters!CustomerSign.Value)

使用此MIME类型:image/png

传递参数:

ReportParameter CustomerSign = new ReportParameter("CustomerSign", obj.SignImage);
rptvw.LocalReport.SetParameters(CustomerSign);

但是图像显示红色交叉[X]而不是图像,并且没有出现错误!

可能是什么问题?

我也尝试过:How can I render a PNG image (as a memory stream) onto a .NET ReportViewer report surface

3 个答案:

答案 0 :(得分:2)

对图片的支持非常有限,this MSDN article讨论了您可以做的事情。

从将问题嵌入报告不是一种选择的问题看起来有点明显。但是可以指定外部dbase作为源。请注意必须设置的EnableExternalImages属性,如MSDN文章所述。似乎要走的路,问题不够详细,您可能需要在代码中提供包含所需图像的合适表格。

答案 1 :(得分:1)

首先,检查Visual Studio输出窗口。调试时,您将看到任何RDLC错误。

例如,我收到一条错误消息,说我传递了无效的base64字符串。

如果你看到:

  

警告:图像“Image”的ImageData属性值为“= Convert.From ...”,这不是有效的ImageData。 (rsInvalidDatabaseImageProperty)

这似乎意味着抛出异常,因此表达式没有进行评估,并作为原始文本传递(因此此消息表明原始文本不是有效的图像数据)。输出窗口中的上一行应包含导致问题的实际错误。

在我的情况下,按照你正在使用的模式(谢谢),我的问题最终是我的数据库中的base64以data:image/png;base64,为前缀,因为它是从html图像元素中提取和写入的

要删除该前缀,请将我的RDLC表达式转换为:

=Convert.FromBase64String(CStr(Parameters!Base64.Value).Substring(22))

我建议从数据库中提取一个64字符串并确认它确实可以用作图像。尝试将其放入base64图像查看器(例如:https://codebeautify.org/base64-to-image-converter)。 (虽然在我的情况下,我猜这不会有帮助,因为即使使用该前缀,该网站仍然有效。)

答案 2 :(得分:0)

=System.Convert.FromBase64String(Parameters!Logo.Value)