Dot-Net
如何將 PNG 圖像(作為記憶體流)渲染到 .NET ReportViewer 報表表面
我有一個動態創建的圖像,我將其保存到流中,以便可以在 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”。