Dot-Net

如何將 PNG 圖像(作為記憶體流)渲染到 .NET ReportViewer 報表表面

  • January 1, 2015

我有一個動態創建的圖像,我將其保存到流中,以便可以在 ReportViewer 表面上顯示它。

設置:

  • Windows 客戶端應用程序(不是 WebForms)
  • 報表數據源是一個對像數據源,具有動態生成的流作為屬性(CustomImage)
  • Report.EnableExternalImages = true
  • Image.Source = 數據庫
  • Image.MIMEType = 圖像/png
  • Image.Value = =Fields!CustomImage.Value

這不起作用,但沒有報告任何錯誤,只是在報告表面上顯示一個空圖像圖示。所有其他欄位都正確顯示。

有沒有人有這個場景的工作程式碼範例?

我正在做類似的事情,以便在報告上更改徽標,但是我利用報告參數來傳遞值。如果圖像是數據的一部分,我看不出為什麼這種通用方法不起作用。

本質上,圖像通過兩個欄位傳遞。第一個欄位是 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”。

引用自:https://stackoverflow.com/questions/36693