12

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

设置:

  • Windows 客户端应用程序(不是 WebForms)
  • 报表数据源是一个对象数据源,具有动态生成的流作为属性(CustomImage)
  • Report.EnableExternalImages = true
  • Image.Source = 数据库
  • Image.MIMEType = 图像/png
  • Image.Value = =Fields!CustomImage.Value

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

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

4

1 回答 1

31

我正在做类似的事情,以便在报告上更改徽标,但是我利用报告参数来传递值。如果图像是数据的一部分,我看不出为什么这种通用方法不起作用。

本质上,图像通过两个字段传递。第一个字段是 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 步:在报告中设置图像的以下属性(不带引号):

  • MIME 类型:“ =Parameters!ReportLogoMimeType.Value
  • 值:“ =System.Convert.FromBase64String(Parameters!ReportLogo.Value)
  • 更新:正如 Gerardo 所说,图像源必须设置为“数据库”

年轻球员的陷阱: 即使您传递的图像似乎“正确大小”,图像通常也会看起来很糟糕,并且好像它们已被缩放。这是因为报表是为打印(300 dpi)而不是屏幕(通常为 72 或 92 dpi)呈现的。修复方法是发送一个大约 3 倍大的图像,在报告中设置正确的大小Sizing并将图像上的“”属性更改为“ FitProportional”。

于 2008-09-30T23:37:10.057 回答