PDA

View Full Version : سوال: دستوراتی برای پرینت گرفتن



batman1
دوشنبه 27 مهر 1394, 13:41 عصر
سلام به همه.
دوستان،من یه دکمه ای دارم که میخوام با زدن اون،بتونم از لیستم،پرینت بگیرم.
میشه دقیق راهنماییم کنید.
ممنون.

am_al_59
دوشنبه 27 مهر 1394, 19:30 عصر
شما از کلیک روی button در فرم راهنمایی و شرح دقیق میخواین!
خیلی طولانیه که
هر کسی یک ابزاری استفاده میکنه مثلاً من خودم از استیمول استفاده میکنم شما توی همین انجمن سرچ کنی کلی جواب برای مراحل مختلف پیدا میکنی
ساده ترین و در دسترس ترینش خود rdlc ویژوال استودیو هست که اینم توی انجمن سرچ کنی جواب زیاده منم دوتا لینک تصویری کامل و ساده که راحت باشه رو میزارم
شما شروع به کار کن اگر جاییش مشکل داشتی همون قسمتو بپرس بالاخره یکی جواب میده من هم اگر بتونم با کمال میل کمک میکنم
http://tech.just4sharing.com/Pages/ASP/How-to-do-a-simple-RDLC-report-using-Visual-Studio.aspx
https://www.packtpub.com/books/content/creating-simple-report-visual-studio-2008

batman1
دوشنبه 27 مهر 1394, 19:59 عصر
من از طریق ابزار print Document خود ویژوال میخوام این کارو بکنم.
این دستورات کافیه:؟
برای دکمم این رو تعریف میکنم:
printDocument1.Print();
و برای خود ابزار print Document هم این کدها رو:

Bitmap bm = new Bitmap(this.dataGridView1.Width, this.dataGridView1.Height);
dataGridView1.DrawToBitmap(bm, new Rectangle(0, 0, this.dataGridView1.Width, this.dataGridView1.Height));
e.Graphics.DrawImage(bm, 0, 0);
حالا اینا اصلا درست هستن؟
ممنون

am_al_59
دوشنبه 27 مهر 1394, 20:12 عصر
یعنی شما داری کنترل رو تبدیل به گرافیک میکنی بعد چاپ میکنی
اون قسمت کدت که گرید رو تبدیل به گرافیک میکنی درسته اما اگر گریدت اسکرول بخوره چی؟
این لینکی که میزارم دقیقاً همون چیزی هست که شما میخوای اما من پیشنهاد میکنم اگر دلیل و محدودیت خاصی نداری از همون ابزارهای گزارش استفاده کن ترو تمیز تره البته نظر شخصیه
بفرمایین اینم لینک
http://www.codeproject.com/Articles/28046/Printing-of-DataGridView

batman1
چهارشنبه 29 مهر 1394, 19:26 عصر
دوستان،من یه تکه کد پیدا کردم،ممنون میشم در خطا گیریش کمکم کنید:
من این دستورات رو برای دکمه ی پرینم تعریف میکنم:
printPreviewDialog1.Document = printDocument1;
printPreviewDialog1.ShowDialog();
در ادامه این دستورات رو برای ابزار PrintDocument تعریف میکنم:

Bitmap bm = new Bitmap(Width, Height);
this.DrawToBitmap(bm, new Rectangle(0, 0, this.Width, this.Height));
e.Graphics.DrawImage(bm, 20, 20);
و یک ابزار هم به نام printPreviewDialog1 به فرمم اضافه میکنم که هیچ کدی هم داخلش نمینویسم.
حالا وقتی دکمه رو میزنم،صفحه پرینت باز میشه و اطلاعات رو برای پرینتر میفرسته:
136185
اما این مشکلو داره.
کل صفحه رو پیرینت نمیگیره.
ممنون میشم دوستان کمک کنن.

am_al_59
چهارشنبه 29 مهر 1394, 19:33 عصر
عرض صفحه شما بیشتر از عرض کاغذه یا تصویرتو کوچیک کن یا کاغذو بچرخون
پرینت گرفتن کنترل این داستان هارو داره

batman1
جمعه 01 آبان 1394, 09:42 صبح
عزیز،چه جوری عرض و طولش رو تغییر بدم؟
کاغذ رو اگه از عرض بذارم که نمیشه.باید نمایشش درست باشه.

batman1
جمعه 01 آبان 1394, 10:19 صبح
راستی،یه تکه کد دیگه هم پیدا کردم.
به نظرتون کدوماش بهترن؟
راستی،من یه برنامه ضبط از صفحه نمایش دارم،به اسم snagit ،وقتی دکمه پرینت رو میزنم،اطلاعات رو واسه پرینتر میفرسته،اما این برنامه اجرا میشه.
و حالا کدها:
public partial class Form1 : Form
{
[System.Runtime.InteropServices.DllImport("gdi32.dll")]
public static extern long BitBlt(IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, int dwRop);
private Bitmap memoryImage;
{
private void CaptureScreen()
{
Graphics mygraphics = this.CreateGraphics();
Size s = this.Size;
memoryImage = new Bitmap(s.Width, s.Height, mygraphics);
Graphics memoryGraphics = Graphics.FromImage(memoryImage);
IntPtr dc1 = mygraphics.GetHdc();
IntPtr dc2 = memoryGraphics.GetHdc();
BitBlt(dc2, 0, 0, this.ClientRectangle.Width, this.ClientRectangle.Height, dc1, 0, 0, 13369376);
mygraphics.ReleaseHdc(dc1);
memoryGraphics.ReleaseHdc(dc2);
}
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
e.Graphics.DrawImage(memoryImage, 0, 0);
}

private void button1_Click(object sender, EventArgs e)
{
CaptureScreen();
printDocument1.Print();
}
اینا خوبن؟

batman1
جمعه 01 آبان 1394, 12:52 عصر
ممنون میشم از دوستان،یکی جواب منو بده.
خیلی به این دستورات نیاز دارم.

am_al_59
جمعه 01 آبان 1394, 13:50 عصر
توی همون آبجک PrintDocument نگاه کن آدرس خصوصیتش میشه این
printDocument1.DefaultPageSettings
بعد از DefaultPageSettings یک نقطه بزن کل خصوصیتهاشو لیست میکنه منجمله اندازه کاغذ حاشیه ها و غیره
یک خصوصیت داره به اسم Landscape که True و False میشه تعیین میکنه کاغذ عمودی باشه یا افقی منظورم این بود از عرض کاغد که بیشتره استفاده کنی یعنی کاغد a4 اگر داری 90 درجه بچرخونی

batman1
جمعه 01 آبان 1394, 16:31 عصر
خب حالا اگه دیتاگریدم اسکورل افقی خرده بود چی؟

am_al_59
جمعه 01 آبان 1394, 16:39 عصر
میگم برای پرینت کنترل بطور مستقیم داستان داری
برای اسکرول خوردن افقی هم شما میتونی اون آبجکت گرافیکی که درست کردی رو کوچیکش کنی اما اگر زیادی اسکرول بخوره مجبوری زیادی کوچیک کنی
اون لینکی که توی پست چهارم گذاشتم اسکرول عمودی رو پشتیبانی میکرد اما افقیشو نمیدونم
اینهمه ابزار گزارشگیری واقعاً سوال شده برام چرا استفاده نمیکنی؟:متفکر:

batman1
جمعه 01 آبان 1394, 16:40 عصر
توی همون آبجک PrintDocument نگاه کن آدرس خصوصیتش میشه این
printDocument1.DefaultPageSettings
بعد از DefaultPageSettings یک نقطه بزن کل خصوصیتهاشو لیست میکنه منجمله اندازه کاغذ حاشیه ها و غیره
یک خصوصیت داره به اسم Landscape که True و False میشه تعیین میکنه کاغذ عمودی باشه یا افقی منظورم این بود از عرض کاغد که بیشتره استفاده کنی یعنی کاغد a4 اگر داری 90 درجه بچرخونی
داداش،بازم نشد.
من داخل ابزار PrintDocument م زدم:
printDocument1.DefaultPageSettings.Landscape = true;
اما صفحه نچرخید و فالسشم کردم،صفحه نچرخید.

batman1
جمعه 01 آبان 1394, 16:41 عصر
شما با ابزار report wiever بلدی کار کنی؟
اون خوبه؟

am_al_59
جمعه 01 آبان 1394, 16:46 عصر
داداش،بازم نشد.
من داخل ابزار PrintDocument م زدم:
printDocument1.DefaultPageSettings.Landscape = true;
اما صفحه نچرخید و فالسشم کردم،صفحه نچرخید.
شاید داره میچرخونه اما چون ابعاد کاغذ تنظیم نیست از ظاهر مشخص نمیشه
شما اندازه کاغذ رو a4 تعریف کن و margin هارو هم ست کن ببین صفر قبول میکنه





شما با ابزار report wiever بلدی کار کنی؟
اون خوبه؟




من با استیمول کارکردم خیلی هم باهاش راحتم تو انجمن کلی آموزش داره واسش

batman1
جمعه 01 آبان 1394, 16:49 عصر
راستش این تکه کد رو خودم ننوشتم و فقط از جایی کپیش کردم،به همین دلیل ازش خیلی سردر نمیارم!!
اگه شما سر در میاری،میشه لطف کنید و یه توضیح کوچولو بدید؟:افسرده:
ممنون.