PDA

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



c-sharp_South
دوشنبه 16 بهمن 1391, 19:12 عصر
سلام دوستان.
موقعی که از کل فرم پرینت میگیرم دو تا مشکل دارم:

1- کیفیت چاپ پایینه.

2- عکسی که برای چاپ میره به صورتی افقی است . من چون عرض فرم ام از طولش بیشتره
میخوام به صورت عمودی چاپ کنه تا بتونه کل فرم رو تحت پوشش قرار بده.
الان موقع چاپ کردن یک قسمت از فرم ام توش صفحه ی چاپ شده نیست. :متفکر:
ممنون میشم راهنمایی کنین. :قلب:

lina7709
دوشنبه 16 بهمن 1391, 19:24 عصر
یه فکری به سایز عکس بکن.
:قهقهه:

naghshineh m&h
دوشنبه 16 بهمن 1391, 20:04 عصر
سلام دوست عزیز گزارش را با چی طراحی کرده Crystal Report Or Any..........
اگر با کریستال باشه موتینم کمکت کنم

the king
دوشنبه 16 بهمن 1391, 20:22 عصر
سلام دوستان.
موقعی که از کل فرم پرینت میگیرم دو تا مشکل دارم:

1- کیفیت چاپ پایینه.

2- عکسی که برای چاپ میره به صورتی افقی است . من چون عرض فرم ام از طولش بیشتره
میخوام به صورت عمودی چاپ کنه تا بتونه کل فرم رو تحت پوشش قرار بده.
الان موقع چاپ کردن یک قسمت از فرم ام توش صفحه ی چاپ شده نیست. :متفکر:
ممنون میشم راهنمایی کنین. :قلب:

با این روشی که بکار می برید مشکل کیفیت چاپ حل شدنی نیست، شما تصویری از فرم که در حد dpi پایین نمایشگر است
رو برای چاپ بکار می برید که dpi اش به مرتب بالاتره و افت کیفیت اش طبیعی و اجتناب ناپذیره.

تغییر دادن جهت چاپ دشوار نیست اما مشکل با کیفیت چاپ سر جاش خواهد ماند.

ابتدای کد :

using System.Runtime.InteropServices;
using System.Drawing.Printing;


داخل کلاس فرم :

private const int WM_PRINT = 0x317;
private const int PRF_CHILDREN = 0x10;
private const int PRF_CLIENT = 0x4;
private const int PRF_NONCLIENT = 0x2;
private const int PRF_OWNED = 0x20;

[DllImport("user32.dll", EntryPoint = "SendMessageA")]
private static extern int SendMessage(int hwnd, int wMsg, int wParam, int lParam);

private Bitmap bmp;

void doc_PrintPage(object sender, PrintPageEventArgs e)
{
RectangleF src = new RectangleF(0, 0, bmp.Width, bmp.Height);
e.Graphics.PageUnit = GraphicsUnit.Display;
e.Graphics.Clip = new Region(e.MarginBounds);
e.Graphics.PageUnit = GraphicsUnit.Pixel;
e.Graphics.TranslateTransform(e.Graphics.ClipBound s.Width + e.Graphics.ClipBounds.Left, 0);
e.Graphics.RotateTransform(90);
e.Graphics.DrawImage(bmp, e.Graphics.ClipBounds, src, GraphicsUnit.Pixel);
}


جایی که می خواهید چاپ فرم انجام بشه :

bmp = new Bitmap(this.Width, this.Height);
using (Graphics g = Graphics.FromImage(bmp))
{
g.Clear(this.BackColor);
IntPtr hDC = g.GetHdc();
SendMessage(this.Handle.ToInt32(), WM_PRINT, hDC.ToInt32(), PRF_CHILDREN | PRF_CLIENT | PRF_OWNED);
g.ReleaseHdc(hDC);
}
pictureBox1.Image = bmp;
PrintDocument doc = new PrintDocument();
doc.PrintPage += new PrintPageEventHandler(doc_PrintPage);
doc.Print();

c-sharp_South
دوشنبه 16 بهمن 1391, 20:34 عصر
ممنون از همه . راهنمایی دوست عزیزمون the king (http://barnamenevis.org/member.php?259237-the-king) مشکل رو حل کرد . فقط هنوز عکس کیفیت پایینی داره.