PDA

View Full Version : سوال: پربنت گرفتن با استفاده از PrintPreviewDialog و PrintDocument



hamidhws
یک شنبه 15 آذر 1388, 04:36 صبح
با سلام
دوستان من یک printpreviewdialog اضافه کردم و یک printdocument که وقتی printpreviewdialog باز میشه (printpreviewdialog.showdialog) میخوام محتویات richtextbox من توش نمایش داده بشه و اگه محتویاتش از 1 صفحه بیشتر شد تو صفحات بعد نمایش بده
امیدوارم منظورمو فهمیده باشید دوستان

ممنون میشم اگه کمکم کنید
با تشکر

hamidhws
یک شنبه 15 آذر 1388, 15:42 عصر
دوستان اگه کسی میدونه دریغ نکنه کارم فوریه
بازم ممنون

hamidhws
یک شنبه 15 آذر 1388, 21:26 عصر
یعنی هیچکس نمیتونه کمک کنه؟

Mani_rf
یک شنبه 15 آذر 1388, 21:48 عصر
خیلی خوب منظور را نرسوندی اما انجام این کار زمان گیر است .

از PrintPreviewControl به جای PrintPreviewDialog استفاده کن.
در خاصیت PrintPage کنترل PrintDocument باید کد های مربوط به چاپ شدن متن RichTextBox را بنویسی.
برای این کار خط به خط از RichTextBox خوانده و با فرمان e.Graphics.DrawString در خاصیت PrintPage آنها را برروی پرونت داکیومنت بنویس.
برای نمایش صفحات بعدی در PrintPreviewControl هم می توانی خاصیت Row این کنترلر را برابر با تعداد صفحاتت قرار دهی.

با کمی تلاش خودت موفق به نوشتن آن خواهی شد. از MSDN هم می توانی برای انجام آن کمک بگیری. مثال های خوبی در این زمینه دارد.

موفق باشی...

hamidhws
سه شنبه 17 آذر 1388, 03:22 صبح
خیلی خوب منظور را نرسوندی اما انجام این کار زمان گیر است .

از PrintPreviewControl به جای PrintPreviewDialog استفاده کن.
در خاصیت PrintPage کنترل PrintDocument باید کد های مربوط به چاپ شدن متن RichTextBox را بنویسی.
برای این کار خط به خط از RichTextBox خوانده و با فرمان e.Graphics.DrawString در خاصیت PrintPage آنها را برروی پرونت داکیومنت بنویس.
برای نمایش صفحات بعدی در PrintPreviewControl هم می توانی خاصیت Row این کنترلر را برابر با تعداد صفحاتت قرار دهی.

با کمی تلاش خودت موفق به نوشتن آن خواهی شد. از MSDN هم می توانی برای انجام آن کمک بگیری. مثال های خوبی در این زمینه دارد.

موفق باشی...

با سلام
خیلی خیلی خیلی ممنون از پاسخگویی شما دوست عزیزتراز جان
دوست عزیز من فرمایشات شما رو تا اونجاکه فهمیدم انجام دادم اما نمیدونم چرا توی PrintPreviewControl نمایش داده نمیشه!
دوست عزیز متاسفانه بدجوری عجله دارم کارم گیره نمیتونم زیاد روش تحقیق کنم اگه بهم بگی دقیقا چی کار کنمو کدوم کدو کجا بنویسم یه دنیا که هیچ 2 دنیا ممنون میشم
فقط دوست عزیز من میخوام از richtextbox پرینت بگیرم و هم بتونم نمایش پرینت رو یدم
یعنی کد نمایش و پرینت
اگه کمکم کنی خیلی خیلی ممنون میشم
پیشاپیش ممنون

hamidhws
چهارشنبه 18 آذر 1388, 04:54 صبح
آقا توروخدا یکم توضیح بدید
یکی کمک کنه ثواب داره به خدا

hamidhws
چهارشنبه 18 آذر 1388, 04:56 صبح
خیلی عجله دارم ممنون میشم اگه کمک کنید

hamidhws
چهارشنبه 18 آذر 1388, 15:44 عصر
با سلام
دوستان خیلی عجله دارم بی زحمت کمک کنید
من یک printpreviewdialog دارم که به یک prinrtdocument وصله
و میخوام از متن داخل یک richtextbox پرینت بگیرم
و در قسمت printdocument.printpage این کدو نوشتم

e.Graphics.DrawString(RichTextBox1.Text, Me.Font, Brushes.Black, 40, 40)

تا اینجا متن richtextbox رو درون printpreviewdialog نشون میده اما مشکلی که هست اینه که طول هر خطو نمیدونم چطوری تنظیم کنم! یعنی اگه طول خط زیاد بشه از صفحه بیرون زده میشه . چیکار کنم که اگه طول خط زیاد شد بره خط بعد تا از صفحه بیرون نزنه؟

یه سوال تقریبا مشابه دیگه هم داشتم :
اگه متن از یک صفحه بیشتر بشه نمیره صفحه بعد و از پایین صفحه بیرون میزنه!
چیکار کنم که اگه طولش از یک صفحه بیشتر شد بره صفحه بعد؟

توروخدا کمک کنید

Mani_rf
چهارشنبه 18 آذر 1388, 22:40 عصر
شما باید خط به خط از RichtextBox بخوانید و در صفحه بنویسید.
پس از :
e.Graphics.DrawString(RichTextBox1.Text, Me.Font, Brushes.Black, 40, 40)
استفاده نکنید.

برای بدست آوردن طول نوشته خود بر مبنای Pixel از تابع e.Graphics.MeasureString استفاده نمایید. و طول نوشته را با طول صفحه هماهنگ سازید. برای این کار :
1- چک کنید که اگر طول متن از صفحه بیشتر بود حرف به حرف از آن کم کند تا به فضای خالی (Space) برسد و در آنجا دوباره طول را چک کنید.
2- اگر طول مناسب بود آن را چاپ و مابقی را در خط جدید (با تغییر دادن مختصات Y) چاپ نمایید .

قسمت دوم :
برای آغاز صفحه جدید از e.HasMorePages = True استفاده نمایید. توجه کنید که با تغییر این خاصیت و پایان یافتن روال شما روال از ابتدا دوباره پیمایش می شود. بنا براین برای نگهداری مکان آخرین خط از متغیری عمومی (Public ) یا پویا (Static) استفاده کنید.

اگر وقت کافی داشتم حتما برایتان Sample می گذاشتم؛ پس تلاش کنید خودتان به نتیجه برسید.

موفق باشید...