C# 字节数组中的水晶报表图像未打印

C# 字节数组中的水晶报表图像未打印,c#,crystal-reports,C#,Crystal Reports,我有一个水晶报表,其中有一个类作为数据源。我有一个字节数组,我正在向它传递位图,但它没有打印在Crystal Report上。请看下面我的代码 var d = new Label(); var eanCreator = new CreateEan(); var bf = new BinaryFormatter(); using (var ms = new MemoryStream()) { bf.Serialize(ms, eanCreator.createBitmap(1.5f, "

我有一个水晶报表,其中有一个类作为数据源。我有一个字节数组,我正在向它传递位图,但它没有打印在Crystal Report上。请看下面我的代码

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);
}
var d=新标签();
var eanCreator=new createan();
var bf=新的二进制格式化程序();
使用(var ms=new MemoryStream())
{
序列化(ms,eanCreator.createBitmap(1.5f,“1234567890”);
var byteArray=ms.ToArray();
var ld=新标签数据
{
PartNumber=“123”,
EanData=字节数组
};
d、 SetDataSource(新列表{ld});
d、 PrintOptions.PrinterName=@“\\SERVER\Printer”;
d、 PrintTopPrinter(1,false,0,0);
}

打印出来时,除了图像之外的所有数据都存在。我正在使用一个类来创建EAN条形码,此部分正确地呈现到图像文件中,但在Crystal Reports中无法识别它。

此方法与您的代码类似。我一直使用这种方法将图像毫无问题地发送到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;
}

为了能够在报告上显示图像,当您提取数据集的图像字段时,它必须是CR中的IBlobFieldObject。实现这一点我有很多困难。
最后,我从报告中删除了数据集(通过“数据库专家”)并重新添加了它。还要确保在数据集中将图像字段设置为字节[]

您可能需要二进制数据,表示某种磁盘图像格式(bmp,jpg)-正确编码并包含标题字段。我也尝试过使用此方法创建字节数组
var byteArray=(byte[])new ImageConverter().ConvertTo(eanCreator.createBitmap(1.5f,appData.EanNumber),typeof(byte[])但这会导致一般GDI错误。您需要将内部位图转换为某种图像格式(Crystal至少处理bmp和jpg),而不是转换为字节数组。我也遇到过同样的问题,但最终输出仅为黑色