2017-05-15 23 views
1

データソースとしてクラスを持つCrystal Reportがあります。ビットマップを渡すバイト配列がありますが、Crystalレポートには印刷されません。以下の私のコードを見てください。Crystalバイト配列のレポート画像が印刷されない

var d = new Label(); 
var eanCreator = new CreateEan(); 

var bf = new BinaryFormatter(); 
using (var ms = new MemoryStream()) 
{ 
    bf.Serialize(ms, eanCreator.createBitmap(1.5f, "1234567890")); 
    var byteArray = ms.ToArray(); 

    var ld = new LabelData 
    { 
     PartNumber = "123", 
     EanData = byteArray 
    }; 
    d.SetDataSource(new List<LabelData> {ld}); 

    d.PrintOptions.PrinterName = @"\\SERVER\Printer"; 
    d.PrintToPrinter(1, false, 0, 0); 
} 

画像を除くすべてのデータが存在します。私はクラスを使用してEANバーコードを作成していますが、この部分はイメージファイルに正しくレンダリングされますが、Crystal Reportsでは認識されません。

+0

正しくエンコードされ、ヘッダーフィールドを含む、何らかの種類のオンディスクイメージ形式(bmp、jpg)を表すバイナリデータが必要です。 – Arvo

+0

私はこのメソッドを使って、バイト配列を 'var byteArray =(byte [])new ImageConverter()。ConvertTo(efCreator.createBitmap(1.5f、appData.EanNumber)、typeof(byte []));'この結果、汎用GDIエラー –

+0

バイト配列ではなく、内部ビットマップから一部のイメージ形式(Crystalが少なくともbmpおよびjpgを処理します)に変換する必要があります。 – Arvo

答えて

1

このメソッドは、コードに似ています。このメソッドを使用して、問題なくCrystal Reportsに画像を送信します。

public static byte[] ConvertImageToByte(Image Value) 
{ 
    if (Value != null) 
    { 
     MemoryStream fs = new MemoryStream(); 
     ((Bitmap)Value).Save(fs, ImageFormat.Jpeg);   
     byte[] retval= fs.ToArray(); 
     fs.Dispose(); 
     return retval; 
    } 
    return null; 
} 
+0

これは素晴らしい動作です!本当にありがとう –

関連する問題