12

我正在尝试@CustomerSign在 RDLC 报告中使用参数()显示图像(base64 字符串) (我正在从报告中呈现 PDF 文件并且我正在查看 PDF 文件)

我已将图像属性配置如下:

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

=Convert.FromBase64String(Parameters!CustomerSign.Value)

使用此 MIME 类型:image/png

并传递参数:

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

但是图像显示红十字[X]而不是图像,并且不会出错!

可能是什么问题?

我也尝试过:如何将 PNG 图像(作为内存流)渲染到 .NET ReportViewer 报表表面

4

3 回答 3

2

对图像的支持非常有限,这篇 MSDN 文章讨论了您可以做什么。

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

于 2017-02-10T08:07:12.470 回答
2

首先,检查 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))

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

于 2017-08-06T02:09:07.017 回答
1
=System.Convert.FromBase64String(Parameters!Logo.Value)
于 2019-08-12T15:20:08.737 回答