2008-08-31 27 views
12

ReportViewerサーフェスに表示できるように、ストリームに保存する動的に作成されたイメージがあります。.NET ReportViewerレポートサーフェスにPNGイメージ(メモリストリームとして)をレンダリングする方法

セットアップ:

  • Windowsクライアントアプリケーション(ないWebフォーム)
  • レポートのデータソースは、プロパティとして、動的に生成されたストリーム(CustomImage)で、オブジェクトデータソースである
  • Report.EnableExternalImages =真
  • Image.Source = Database
  • Image.MIMEType = image/png
  • Image.Value = CustomsI mage.Value

これは機能していませんが、エラーは報告されていません。レポートの表面に空の画像アイコンが表示されます。その他のフィールドはすべて正しく表示されています。

誰かがこのシナリオの実用的なコードサンプルを持っていますか?

答えて

26

私はレポート上で変更されたロゴを持つために同様のことをしますが、レポートパラメータを使用して値を渡します。画像がデータの一部であった場合、この一般的な方法がうまくいかない理由はありません。

イメージは、基本的に2つのフィールドに渡されます。最初のフィールドはMIMEタイプ値で、2番目のフィールドはイメージの内容を含むBase64エンコードされた文字列です。

ステップ1:画像をBase64エンコーディングに変換します。レポートに画像と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タイプを簡単にするために、このメソッドにImageFormat.Pngを渡します)。

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) "
  • 更新日: As Ger彼らはあなたがイメージに渡しているにもかかわらず、拡大縮小してきたように 多くの場合、画像は恐ろしい外観となります:ARDOのは、イメージソースは、若い選手のための「データベース」

トラップに設定する必要があり、以下語りますこれは「正しいサイズ」と思われる。これは、レポートは印刷(300 dpi)で表示され、画面では表示されない(通常72または92 dpi)ためです。この問題を解決するには、画像を約3倍大きく送信し、レポートのサイズを正しく設定し、画像の「Sizing」プロパティを「FitProportional」に変更します。

+0

Thnxたくさん、私は非常に助けて! – Martijn

+7

Image Sourceを** Database **に設定する必要があることを明確にしたかっただけです。 Sourceプロパティを正しい値に設定するまで、このソリューションを動作させることができませんでした。あなたが注意を払わなければ逃すかもしれない少し詳細。 –

+0

@Adrian:私は同じ問題を抱えていますが、ここで説明したように私はしていますが、私のために働いていない私の質問[ここ]を確認してください(http://stackoverflow.com/questions/42020490/base64-image-doesnt- display-on-render-pdf-from-rdlc-report) –

関連する問題