当前位置:  开发笔记 > 编程语言 > 正文

如何将PNG图像(作为内存流)呈现到.NET ReportViewer报表界面

如何解决《如何将PNG图像(作为内存流)呈现到.NETReportViewer报表界面》经验,为你挑选了1个好方法。

我有一个动态创建的图像,我将其保存到流中,以便我可以在ReportViewer表面上显示它.

建立:

Windows客户端应用程序(不是WebForms)

Report datasource是一个对象数据源,动态生成的流作为属性(CustomImage)

Report.EnableExternalImages = true

Image.Source =数据库

Image.MIMEType = image/png

Image.Value = = Fields!CustomImage.Value

这不起作用,但没有报告任何错误,只是在报表界面上显示一个空图像图标.所有其他字段都正确显示.

有没有人有这个场景的工作代码示例?



1> Adrian Clark..:

我正在做类似的事情,以便在报告上更改徽标,但我利用报告参数来传递值.如果图像是数据的一部分,我认为没有任何理由说明这种通用方法不起作用.

基本上,图像通过两个字段传递.第一个字段是MIME类型值,第二个字段是包含图像内容的Base64编码字符串.

第1步:将图像转换为Base64编码.(我们的代码总是传递ImageFormat.Png给此方法以使MIME类型更容易)

private static string ConvertImageToBase64(Image image, ImageFormat format)
{
    byte[] imageArray;

    using (System.IO.MemoryStream imageStream = new System.IO.MemoryStream())
    {
        image.Save(imageStream, format);
        imageArray = new byte[imageStream.Length];
        imageStream.Seek(0, System.IO.SeekOrigin.Begin);
        imageStream.Read(imageArray, 0, imageStream.Length);
    }

    return Convert.ToBase64String(imageArray);
}

第2步:将图像和MIME类型传递给报告.

reportParams[0] = new ReportParameter("ReportLogo", base64Logo);
reportParams[1] = new ReportParameter("ReportLogoMimeType", "image/png");

_reportViewer.LocalReport.SetParameters(reportParams);

步骤3:在报告中在图像上设置以下属性(不带引号):

MIMEType:" =Parameters!ReportLogoMimeType.Value"

价值:" =System.Convert.FromBase64String(Parameters!ReportLogo.Value)"

更新:正如Gerardo所说,图像源必须设置为'数据库'

对于年轻球员的陷阱: 即使你传递的图像似乎是"正确的尺寸",这些图像通常看起来很糟糕,而且它们已被缩放.这是因为报告是为了打印(300 dpi)而不是屏幕(通常是72或92 dpi).修复是将图像发送大约3倍太大,在报告中设置正确的大小Sizing并将图像上的" "属性更改为" FitProportional".


我只是想澄清一下,必须将图像Source设置为**Database**.在将Source属性设置为正确的值之前,我无法使此解决方案有效.如果你不注意,可能会错过一些细节.
推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有