I have a report where there is a static image, but I need to load the image dynamically.
Already checked this, this, this and this
All I tried without success. I need some sample code.
Any suggestion?
Asked
Active
Viewed 3,584 times
0
1 Answers
1
To load images dynamically I created a new class/model called ImageModel.
public class ImageModel
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public Byte[] ImageBytes { get; set; }
}
This class has a field called Image, it will load the image.
The next step is add ImageBytes field to the report.
Through Crystal Report interface, using the Field Explorer, it was to create a new connection. In this new connection I used my ImageModel class as a model.
By adding the ImageBytes field, I noticed that Crystal Reports added a type crBlobFieldObject object.
To load the image was necessary to make the following code:
public Byte[] GetImageBytes(string image_name)
{
Byte[] bytes = null;
if (!string.IsNullOrEmpty(image_name))
{
string app_path = ((System.Web.HttpRequestWrapper)this.Request)
.PhysicalApplicationPath;
app_path += "Content\\images\\";
string full_path = app_path + image_name;
//
if (System.IO.File.Exists(full_path))
{
FileStream fs = new FileStream(full_path, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
bytes = br.ReadBytes(Convert.ToInt32(br.BaseStream.Length));
}
}
return bytes;
}
The main code looks like this:
public JsonResult GenerateCrystalReportImage()
{
List<ImageModel> list_image = new List<ImageModel>();
//
ImageModel imageone = new ImageModel();
imageone.Id = 1;
imageone.Name = "Image name one";
imageone.Description = "This is a image description one";
imageone.Image = GetImageBytes("imageone.png");
list_image.Add(imageone);
//
ImageModel imagetwo = new ImageModel();
imagetwo.Id = 2;
imagetwo.Name = "Image name two";
imagetwo.Description = "This is a image description two";
imagetwo.Image = GetImageBytes("imagetwo.png");
list_image.Add(imagetwo);
//
ReportDocument rp = new ReportDocument();
rp.Load(System.Web.HttpContext.Current.Server.MapPath("~/Reports/") + "Test.rpt");
rp.SetDataSource(list_image);
rp.ExportToHttpResponse(ExportFormatType.PortableDocFormat,
System.Web.HttpContext.Current.Response,
false,
"image_list_" + DateTime.Now);
rp.Close();
return Json(new
{
data = "ok",
results = 1,
success = true,
errors = String.Empty
}, JsonRequestBehavior.AllowGet);
}

Sr Julien
- 494
- 1
- 8
- 27