عنوان:

‫ارسال عکس به stimulsoft و ایجاد گزارش


نویسنده: علیرضا حسنی
تاریخ: ۱۳۹۴/۱۱/۰۴ ۲۰:۴۵
آدرس: www.dntips.ir
برنامه‌ی Stimulsoft designer را باز کرده و از قسمت سمت راست (Dictionary) بر روی Variable راست کلیک می‌کنیم. 


سپس بر روی گزینه‌ی New Variable کلیک می‌کنیم:



اکنون در قسمت Name، نام نمایشی را وارد می‌کنیم که با تبدیل کردن Alias نیز تغییر می‌کند و می‌تواند متفاوت باشد. در ادامه در قسمت Type ،Type را بر روی Image می‌گذاریم و سپس بر روی دکمه‌ی ok کلیک می‌کنیم. حال variable ایی را که ایجاد کرده‌ایم، بر روی صفحه می‌کشیم و در محل مورد نظر قرار می‌دهیم و پروژه را save می‌کنیم. تا اینجا توانسته‌ایم فایلی را به‌وسیله‌ی stimulsoft ایجاد کنیم که دارای یک مقدار variable هست.

حال باید بتوانیم آن را در پروژه‌ی خود استفاده کنیم. جهت استفاده‌ی از آن‌، یک پروژه‌ی از نوع برنامه‌ی ویندوز (Windows Application) را ایجاد می‌کنیم و بر روی آن یک دکمه را جهت ارسال (چاپ گزارش) قرار می‌دهیم.

سپس به قسمت #C رفته و یک متد را تحت عنوان imageToByteArray مانند کدهای زیر ایجاد می‌کنیم:

public byte[] imageToByteArray(System.Drawing.Image imageIn)
{
    MemoryStream ms =n ew MemoryStream();
    imageIn.Save(ms, imageIn.RawFormat);
    return ms.ToArray();
}
در ادامه در پشت دکمه‌ی چاپ، کدهای زیر را قرار می‌دهیم:
var img = new System.Drawing.Bitmap(@"C:\\Users\\Ali\\Desktop\\multipage_tif_example.tif");
byte[] array1 = imageToByteArray(img); 

MemoryStream ms = new MemoryStream(array1);
System.Drawing.Image image = System.Drawing.Image.FromStream(ms);

StiReport rpt = new StiReport();
rpt.Load(Application.StartupPath + "\\Report(image).mrt");
rpt.Dictionary.Variables.Add("Image1", image);
rpt.Compile();
rpt.Show();
که در اینجا آدرس فایل عکس به‌صورت دستی داده‌شده است:
var img = new System.Drawing.Bitmap(@"C:\\Users\\Ali\\Desktop\\multipage_tif_example.tif");
و مسیر فایل stimulsoft
  rpt.Load(Application.StartupPath + "\\Report(image).mrt");
حال پروژه‌ی خود را اجرا کرده و نتیجه را می‌بینیم.

باید دقت داشت جهت استفاده‌ی از برنامه Stimulsoft بایستی dll‌های مربوط به آن در پروژه قرارگرفته باشد و استفاده شده باشد.

نظرات

  • جمال یارمحمدی در ۱۳۹۶/۰۴/۳۱ ۱۱:۵۳
     با سلام ممنون از مقاله خوبتون
    می‌خواستم بدونم چطور میشه یک فایل(مثلا pdf) رو جهت نمایش در گزارش به استیمول سافت پاس داد؟
  • دیبایی در ۱۳۹۷/۰۴/۲۹ ۱۰:۵
    با سلام، من از این روش برای ارسال عکس به Bussiness Object استفاده کردم، که در واقع یک لیست رو که در برنامه C# ساخته شده و یک ستون عکس داره رو میخوام گزارش بگیرم، علاوه بر توضیحات شما از این مطلب هم استفاده کردم. اما ستون تصاویر نمایش داده نمیشه و یا اینکه به ازای type‌های مختلف عبارت هایی مثل عبارت زیر نمایش داده میشه:
    System.Drawing.Bitmap
    تصاویری که داشتم در دیتابس sql ذخیره شده  و من برای یک گزارش جدید دیگه نمیخوام توی sql إخیره کنم  و نیاز دارم که لیست رو مستقیما به گزارش ارسال کنم. ممنون میشم راهنمایی کنید.
    private void ModifyItemList()
            {
                ItemList.Clear();
                var AllItems = from BetaData in BetaContext.BetaDatas
                               where BetaData.ProjectName == Globals.ProjectName &&
                               BetaData.ProjectCode == Globals.ProjectCode &&
                               (BetaData.Type == Globals.Types.Partition || BetaData.Type == Globals.Types.Door)
                               select BetaData;
                               
                foreach(BetaData data in AllItems)
                {
                    byte[] imageByte = data.Image.ToArray();
                    MemoryStream MS = new MemoryStream(imageByte);
                    Image img = Image.FromStream(MS);
                    StiImage stiImg = new StiImage();
                    stiImg.Image = img;
                    Items newItem = new Items
                    {
                        Image = img,
                        Name = data.Name
                    };
                    ItemList.Add(newItem);
                }
                             
            }
    
            private void modiefieItemListToolStripMenuItem_Click(object sender, EventArgs e)
            {
                
            }
    
            private void modifiedItemListToolStripMenuItem_Click(object sender, EventArgs e)
            {
                ModifyItemList();
                ModifiedItemListReport.RegBusinessObject("Items",ItemList);
                ModifiedItemListReport.Compile();
                ModifiedItemListReport.Render();
                ModifiedItemListReport.Show();
            }
    
            public class Items
            {
                public string Name { get; set; }
                public Image Image { get; set; }
            }
    • علیرضا حسنی در ۱۳۹۷/۰۴/۲۹ ۱۰:۳۴
      با سلام
      فکر میکنم مربوط به نحوه کد و برگرداندن عکس باشه
      یک تست ابتدا بکنید بیاید عکس را پاس بدید ببینید عکس را به تنهایی نشان میده یا خیر 
      اگر درست جواب نداد عکس را از روی سیستم فرا بخونید ببینید قابل مشاهده هست یا خیر
      اگر از موارد بالا استفاده شد و جواب نگرفتید احتمالا مربوط به نحوه تنظیمات در داخل stimul می‌باشد
      یک تست کنید اگر بازم مشکلی داشتید بفرمایید با هم بررسی کنیم
      • دیبایی در ۱۳۹۷/۰۴/۲۹ ۱۳:۰
        ممنون از پاسخ شما.
        با استفاده از همین کد بالا عکس رو ارسال کردم، اما یه کار دیگه کردم توی خود گزارش که درست شد.
        فقط با این تفاوت که این نیازی به این دو خط نیست:
        StiImage stiImg = new StiImage();
                        stiImg.Image = img;

        من ستون Image رو در خود business Object ساخته بودم و همون رو در Data Band استفاده میکردم، اومدم یک باکس از نوع Image  اضافه کردم که تصویر اون رو Data Column  و همون ستون Image در business object انتخاب کردم و درست شد.