PDA

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



احمد سامعی
دوشنبه 23 اردیبهشت 1392, 13:44 عصر
سلام
من در برنامم یک فرم دارم که اطلاعات زیادی کاربر وارد می کنه و قرار اون ها بعد از تمکیل فرم چاپ بشه. در واقع این ها اطلاعات یک قرارداد هست که قرار ذخیره بشه.
حالا در زمان چاپ کاربر شاید به دلایلی که خودش می دونه بخواد تنظیمات چاپ مانند سایز کاغذ و هاشیه ها و تعداد نسخه ها رو انتخاب کنه مثلا نسخه مشتری، بایگانی و دیگر تنظیمات... من زیاد تمایل ندارم از کریستال ریپورت استفاده کنم می خوام از پرینت داکیومنت با استفاده از کلاس گرافیک و دراو استرینگ استفاده کنم

حالا سوال من این هست؟
من دارم فونت و سایز فونت از کاربر می گیرم و محل قرارگیری هر بخش از متن رو مقدار دهی می کنم. بنابراین با توجه اینکه کاربر می تونه اندازه کاغذ و فونت رو تغییر بده ممکن تعداد صفحاتی که باید چاپ بشه تغییر کنه ولی من وقتی e.HasMorePages = true اعمال می کنم بعد از فراخوانی متد پرینت متد printDocument1_PrintPage حلقه بی نهایت برایش ایجاد می شه و هزار بار بیشتر فراخوانی می شه تا زمانی که ویندوز خطای مموری بده!

چی کار باید بکنم؟

ممنون

احمد سامعی
سه شنبه 24 اردیبهشت 1392, 15:47 عصر
این هم نمونه کد های من


public void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
// create brush...
StringFormat format = new StringFormat(StringFormatFlags.FitBlackBox | StringFormatFlags.DirectionRightToLeft);
SolidBrush brush1 = new SolidBrush(Color.Black);
SolidBrush brush2 = new SolidBrush(Color.DarkGreen);
Font font1 = new Font(Pro.Default.DocFontName, Pro.Default.DocFontSize);
Font font2 = new Font(Pro.Default.DocFontName, Pro.Default.DocFontSize, FontStyle.Bold);
Pen pen = new Pen(new SolidBrush(Color.Black), 2.0F);
RectangleF rec = e.PageSettings.Bounds;
rec.Width -= (e.PageSettings.Margins.Left + e.PageSettings.Margins.Right);
float height = e.Graphics.MeasureString("بند 1:", font2, (int)rec.Width, format).Height;

/*----------------------------Title------------------------------*/
// draw Logo
if (Pro.Default.DocIsLogo & System.IO.File.Exists(Application.StartupPath + @"\logo.jpg"))
{
format.Alignment = StringAlignment.Center;
e.Graphics.DrawImage(new Bitmap(Application.StartupPath + @"\logo.jpg"), (rec.Width / 2) - 35, rec.Y, 70, 70);
rec.Y += 50;
}
format.Alignment = StringAlignment.Center;
e.Graphics.DrawString("فرم قرارداد", new Font("IranNastaliq", 45), brush2, rec, format);
rec.Y += e.Graphics.MeasureString("فرم قرارداد", new Font("IranNastaliq", 45), e.PageBounds.Width, format).Height + 10;
e.HasMorePages = true;
{