2016-10-05 1 views
-1

У меня есть отчет, где есть статическое изображение, но мне нужно загрузить изображение динамически.
Уже проверено this, this, this и this
Все, что я безуспешно. Мне нужен образец кода.

Любое предложение?Кристаллический отчет загружает изображение (байты []) во время выполнения с C#

ответ

0

Чтобы загрузить изображения динамически, я создал новый класс/модель под названием ImageModel.

public class ImageModel 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; }  
    public Byte[] ImageBytes { get; set; } 
} 

Этот класс имеет поле под названием Image, она будет загружать изображение. Следующим шагом является добавление ImageBytes Поле к отчету.

Через интерфейс Crystal Report, используя полевой проводник, он должен был создать новое соединение. В этом новом соединении я использовал модель ImageModel в качестве модели. Добавив поле ImageBytes, я заметил, что Crystal Reports добавила объект crBlobFieldObject.

Чтобы загрузить изображение было необходимо сделать следующий код:

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; 
} 

Основной код выглядит следующим образом:

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); 
} 
Смежные вопросы