ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

クリスタルレポートで動的に画像を出力

Visual Studio 2005に付属のクリスタルレポートで動的に画像を出力できますが、方法がややこしいです。


Visual Studio 2005のC#で作られたプログラムに印刷機能があります。
Visual Studio 2005に付属のクリスタルレポートでレイアウトをして、印刷しています。

今までは文字だけだったところに、動的に画像を出力する要件がでてきました。

着手前は簡単にできるだろうと思っていました。
いざ修正しようとすると、固定で画像を貼り付けることはできても、動的に画像を指定するようにはできていないようです。

検索をいろいろした結果、

  1. 画像データをデータベースにバイナリで挿入する。
  2. データベースから読み込んでクリスタルレポートに出力する。

ということをすればできそうだということはわかりました。

画像データをデータベースにバイナリで挿入するのは、以下のようにできるようになりました。
SQL Server:image型のカラムにデータを挿入する方法 - ソフトウェア開発者の日常

データベースから読み込んでクリスタルレポートに出力するのは、既存のコードを真似をしましたが、上手くいきません。
データベースから読み込んだデータは、object型の配列になっていて、配列の添字は画像データのサイズ分になっています。
出力先のクリスタルレポートの変数は、Byte型を指定していたので型があいません。

クリスタルレポートでは配列型の選択肢がなかったので、無理なのかと思っていたら、「Byte[]」と入力してもコンパイルできました。

配列にはできたので、object型の配列からByte型の配列へのキャストをするために、

cryimage = (byte[])dbimage;

としたら、コンパイルエラーもなくなりました。

動作を確認したら、画像が出力されたので、画像の動的出力へ一歩前進しました。


クリスタルレポートの使い方も知らない状態で引き受けて、一時はお手上げも覚悟しましたが、なんとかなりました。