12

ReportViewer サーフェスに表示できるように、動的に作成された画像をストリームに保存しています。

設定:

  • Windows クライアント アプリケーション (WebForms ではない)
  • レポート データソースは、動的に生成されたストリームをプロパティ (CustomImage) として持つオブジェクト データソースです。
  • Report.EnableExternalImages = true
  • Image.Source = データベース
  • Image.MIMEType = 画像/png
  • Image.Value = =フィールド!CustomImage.Value

これは機能していませんが、エラーは報告されておらず、レポート サーフェスに空の画像アイコンが表示されているだけです。他のすべてのフィールドは正しく表示されています。

このシナリオの実用的なコード サンプルはありますか?

4

1 に答える 1

31

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

基本的に、画像は 2 つのフィールドに渡されます。最初のフィールドは MIME タイプの値で、2 番目のフィールドは画像コンテンツを含む 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 が以下に述べているように、イメージ ソースを「データベース」に設定する必要があります。

若いプレイヤーへの罠: 「適切なサイズ」のように見える画像を渡したとしても、画像が恐ろしく、拡大縮小されたように見えることがよくあります。これは、レポートが画面 (通常は 72 または 92 dpi) ではなく、印刷 (300 dpi) 用にレンダリングされるためです。修正するには、大きすぎる約 3 倍の画像を送信し、レポートで正しいサイズに設定Sizingし、画像の " " プロパティを" " に変更しFitProportionalます。

于 2008-09-30T23:37:10.057 に答える