bahar_engineer
پنج شنبه 15 مرداد 1388, 15:06 عصر
همونطور که بارها گفتم می خوام از یه صفحه پرینت بگیرم در واقع می خوام از یک groupbox پرینت بگیرم که خودش شامل یه تکست باکس می شه
البته می خوام فول اسکرین باشه یعنی موقع چاپ کل صفحه پر کنه
چند تا روش داشتم :
1. استفاده از کامپوننت ControlPrint که ضمیمه اش کردم و کدش برای پرینت از یک کنترل اینه :
ControlPrint m_print = new ControlPrint(groupBox3);
printPreviewDialog1.Document = (PrintDocument)m_print;
printPreviewDialog1.ShowDialog();
که شما به جای groupbox3 می تونین هر کنترلی که خواستین چاپ کنین رو بذارین
این کد مشکلش اینه که نمی دونم با چه تنظیماتی اونو فول اسکرین چاپ کنم... البته سمپل خودش فول هست اما من چیزی توش پیدا نکردم
2. از groupbox عکس گرفتم و اون عکس رو بصورت فول اسکرین با کد زیر چاپ می کنم:
کد رویداد کلیک دکمه پرینت:
temimg = Emxx.Capture.Control(groupBox1);
printDialog1.Document = printDocument1;
printDialog1.ShowDialog();
printPreviewDialog1.Document = printDocument1;
printPreviewDialog1.ShowDialog();
که Emxx یک dll هست که اونم توی ضمیمه گذاشتم و از کنترل ها عکس می گیره
این کد هم توی رویداد printDocument1_PrintPage می نویسیم:
e.Graphics.DrawImage(myimage, 0, 0, a, b);
و a و b ابعاد تصویر هستند که می خوایم توی صفحه چاپ بشه و من a=850 و b=1100 گرفتم که فول اسکرین می شه اینطوری
در این حالت هم مشکل من اینه که در حالت عادی مسئله ای وجود نداره یعنی شما یک عکس داشته باشی راحت به این شکل با این کد که توی رویداد printDocument1_PrintPage گذاشتم از عکست پرینت فول اسکرین می گیری
اما الان که من اومدم اول از groupbox عکس گرفتم گویا ابعاد این عکس کوچک هست و مجبور شدم اونو تبدیل کنم به ابعاد بزرگ و از این کد استفاده کردم
Image newBitmap = new Bitmap(temimg, new Size(1500, 2000));
myimage = newBitmap;
و به این شکل عکسم بزرگ شد و فول اسکرین هم شد چون زمانی که عکس کوچک بود و پرینت می گرفت عکس تار نمایش داده می شد ... با این کار عکس شفاف و با رزلوشن نسبتاً خوبی نمایش داده می شود . ابعاد عکس من به 1500*2000 تغییر یافته است
خوب حالا مشکل اینجاست که با انواع پرینت عکس به سادگی چاپ می شود به جز پرینتر اصلی
یعنی با ADobe PDf و ... چاپ می شود اما هنگامی که پرینتر hp را به عنوان پرینتر مورد نظر کاربر انتخاب می کنم خطا می ده که فکر می کنم به خاطر حجم بالای عکس باشه که براش ارسال می کنم
خطا اینه :
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
با این اوصاف انگار فقط می مونه استفاده از کریستال ریپورت
به نظر شما برای پرینت گرفتن از یک کنترل groupbox استفاده از کریستال ریپورت کار درستیه؟
اگه اینطوره در این مورد راهنمایی کنین چون من اصلاً نمی دونم این کریستال چطوریه اونم برای یه تک صفحه چون من در اینجا نیازی به ارتباط کریستال با بانک ندارم
من منتظرم ... همه نوعش و امتحان کردم دیدید که .. پس دریغ نکنید
البته می خوام فول اسکرین باشه یعنی موقع چاپ کل صفحه پر کنه
چند تا روش داشتم :
1. استفاده از کامپوننت ControlPrint که ضمیمه اش کردم و کدش برای پرینت از یک کنترل اینه :
ControlPrint m_print = new ControlPrint(groupBox3);
printPreviewDialog1.Document = (PrintDocument)m_print;
printPreviewDialog1.ShowDialog();
که شما به جای groupbox3 می تونین هر کنترلی که خواستین چاپ کنین رو بذارین
این کد مشکلش اینه که نمی دونم با چه تنظیماتی اونو فول اسکرین چاپ کنم... البته سمپل خودش فول هست اما من چیزی توش پیدا نکردم
2. از groupbox عکس گرفتم و اون عکس رو بصورت فول اسکرین با کد زیر چاپ می کنم:
کد رویداد کلیک دکمه پرینت:
temimg = Emxx.Capture.Control(groupBox1);
printDialog1.Document = printDocument1;
printDialog1.ShowDialog();
printPreviewDialog1.Document = printDocument1;
printPreviewDialog1.ShowDialog();
که Emxx یک dll هست که اونم توی ضمیمه گذاشتم و از کنترل ها عکس می گیره
این کد هم توی رویداد printDocument1_PrintPage می نویسیم:
e.Graphics.DrawImage(myimage, 0, 0, a, b);
و a و b ابعاد تصویر هستند که می خوایم توی صفحه چاپ بشه و من a=850 و b=1100 گرفتم که فول اسکرین می شه اینطوری
در این حالت هم مشکل من اینه که در حالت عادی مسئله ای وجود نداره یعنی شما یک عکس داشته باشی راحت به این شکل با این کد که توی رویداد printDocument1_PrintPage گذاشتم از عکست پرینت فول اسکرین می گیری
اما الان که من اومدم اول از groupbox عکس گرفتم گویا ابعاد این عکس کوچک هست و مجبور شدم اونو تبدیل کنم به ابعاد بزرگ و از این کد استفاده کردم
Image newBitmap = new Bitmap(temimg, new Size(1500, 2000));
myimage = newBitmap;
و به این شکل عکسم بزرگ شد و فول اسکرین هم شد چون زمانی که عکس کوچک بود و پرینت می گرفت عکس تار نمایش داده می شد ... با این کار عکس شفاف و با رزلوشن نسبتاً خوبی نمایش داده می شود . ابعاد عکس من به 1500*2000 تغییر یافته است
خوب حالا مشکل اینجاست که با انواع پرینت عکس به سادگی چاپ می شود به جز پرینتر اصلی
یعنی با ADobe PDf و ... چاپ می شود اما هنگامی که پرینتر hp را به عنوان پرینتر مورد نظر کاربر انتخاب می کنم خطا می ده که فکر می کنم به خاطر حجم بالای عکس باشه که براش ارسال می کنم
خطا اینه :
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
با این اوصاف انگار فقط می مونه استفاده از کریستال ریپورت
به نظر شما برای پرینت گرفتن از یک کنترل groupbox استفاده از کریستال ریپورت کار درستیه؟
اگه اینطوره در این مورد راهنمایی کنین چون من اصلاً نمی دونم این کریستال چطوریه اونم برای یه تک صفحه چون من در اینجا نیازی به ارتباط کریستال با بانک ندارم
من منتظرم ... همه نوعش و امتحان کردم دیدید که .. پس دریغ نکنید