PDA

View Full Version : سوال: باز هم در مورد پرینت



Navid Asadi
سه شنبه 02 تیر 1388, 11:07 صبح
سلام
چطور میشه با Print Document پرینت Right to left گرفت؟
من بار ها این سوال رو مطرح کردم اما هرگز به پاسخ درستی نرسیدم.
جستوجو هم کردم اما هیچ یک از راه حل ها عملی نشد.

sari-1369
سه شنبه 02 تیر 1388, 17:43 عصر
خوب حتما کسی بلد نیست ، شما فکر کنم 4 یا 5 تا پست فقط با همین سوال ایجاد کردی ...

تکرار سوال که مشکلتو حل نمیکنه .

Mani_rf
سه شنبه 02 تیر 1388, 20:25 عصر
من با Print Document تا دلت بخواد کار کردم
دقیق بگو میخوای چی کار کنی تا راهنماییت کنم.

تمام پرینت های این برنامه ام که این پایین گذاشتم را با Print Document نوشتم.

abi_sarab
چهارشنبه 03 تیر 1388, 08:49 صبح
آقا خوب راست می گه!
یعنی هیچ کس نیست در مورد Right to left برای پرینت چیزی بدونه؟
یا لااقل یه پروژه نمونه داشته باشه؟

Navid Asadi
چهارشنبه 03 تیر 1388, 12:08 عصر
سلام Mani_rf (http://barnamenevis.org/forum/member.php?u=81144)
شما بار ها به من کمک کردین این بار هم ممنون میشم.
شما فقط به من بگو اگه یک text box داشته باشم و بخوام متن توی اون رو Right to Left پرینت بگیرم چیکار کنم؟(بقیش با خودم)

Navid Asadi
چهارشنبه 03 تیر 1388, 12:10 عصر
تمام پرینت های این برنامه ام که این پایین گذاشتم را با Print Document نوشتم.

ببخشید کدوم برنامه؟
اون پایین هیچی نبود!؟
باز هم متشکرم

sari-1369
چهارشنبه 03 تیر 1388, 13:27 عصر
ببخشید کدوم برنامه؟
اون پایین هیچی نبود!؟
باز هم متشکرم





http://doostanshop.com/Restaurant
http://doostanshop.com/restaurant/TerialCD.png (http://doostanshop.com/Restaurant)

Navid Asadi
چهارشنبه 03 تیر 1388, 15:18 عصر
خوب با اون برنامه چیکار کنم؟

Navid Asadi
چهارشنبه 03 تیر 1388, 15:24 عصر
خوب حتما کسی بلد نیست ، شما فکر کنم 4 یا 5 تا پست فقط با همین سوال ایجاد کردی ...

تکرار سوال که مشکلتو حل نمیکنه .

دوست عزیز من بعید میدونم کسی بلد نباشه !
آخه از این همه کاربر این سایت یکیشون برنامه ای ننوشته که توش متن فارسی رو پرینت بگیره!!!!
تکرار من هم به این علت هستش که شاید کار بر های تازه وارد بدونن و مرحمتی کنن و پاسخ من رو بدن.

Mani_rf
چهارشنبه 03 تیر 1388, 16:57 عصر
امضا به این گندگی را همه دیدن شما چطوری ندیدید من موندم!!!!
بعد از اون منظوره من این بود که برنامه را دانلود کن ،‌نصب کن ،‌یک پرینت از باهاش بگیر ، اگر دیدی همون چیزی است که دنبالشی بگو تا برات Sample بفرستم. وگر نه من خودم می دونم برنامه ام به کار هیچکدوم از بچه های برنامه نویس سایت نمی خوره. گذاشتم ببینید ، ایراداشو بگید ، نظر بدین و هر جاش که جالب بود و نمی دونستید چی کار کردم را بگید توضیح بدیم.

sari-1369
چهارشنبه 03 تیر 1388, 17:05 عصر
امضا به این گندگی را همه دیدن شما چطوری ندیدید من موندم!!!!
.

فکر کنم نمایش امضا اعضا برای ایشون غیر فعال و باید از قسمت "پرونده و تنظیمات کاربر" نمایش امضا هارو فعال کنند .

Mani_rf
چهارشنبه 03 تیر 1388, 17:20 عصر
اول از اینکه باید بگم شما نمی توانید Print Document را Right to Left کنید.

شما تو Print Document به این شکل نوشته را آماده چاپ می کنید دیگه :





Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage

e.Graphics.DrawString("مثال", New Font("Tahoma", 14, FontStyle.Regular), Brushes.Black, 0, 0)

End Sub




درسته؟؟؟

مشکل شما اینه که وقتی مثلا و قتی می خوای تو مختصات 100و200 نوشته ای را چاپ کنید از مختصات آن از راست به چپ در نظر گرفته می شود و اگر طول نوشته تغییر کند نقطه شروع آن در فارسی هم تغییر می کند درسته؟؟؟

خوب تو این شرایط ما می توانیم با یک فرمول ساده نقطه شروع متن را به نسبت اندازه آن تغییر بدهیم.

اگر فرض کنیم که ما مختصات پایه را داریم ، اندازه نوشته را هم داریم به کم کردن آن دو از هم مختصات ابتدای متن فارسی را به دست می آوریم دیگه نه؟؟؟

مختصات پایه را که خودمان داریم.
تابع e.Graphics.MeasureString اندازه رشته را به ما می دهد.
در نتیجه برای به دست آوردن نتقطه شروع متن فرمول ساده زیر را می نویسیم.





Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage

'تعریف متن
Const Text As String = "متن نمونه"

'تعریف قلم مورد نظر
Dim Font As Font = New Font("Tahoma", 14, FontStyle.Regular)

' نقطه شروع پیشفرض متن
Const FixLocation As Integer = 100

'محاسبه اندازه متن
Dim TextSize As Integer = e.Graphics.MeasureString(Text, Font).Width

' محاسبه نقطه شروع متن بعد از تغییر متن
Dim StartLocation As Integer = FixLocation - TextSize

' و در آخر چاپ متن بر روی صفحه
e.Graphics.DrawString(Text, Font, Brushes.Black, StartLocation, 200)

End Sub





اگر احتمالا مشکل حل نشد دقیق تر بگو چی کار می خوای انجام بدی تا مثال دیگه ای بزنم .
مطمعنم گیر همین MeasureString بودی . من خودمم کلی گشتم تا پیداش کردم.

جواب می ده. من کل گزارش هام را با همین روش نوشتم. باور نداری نگاه کن...


موفق باشی...
:لبخند:

Navid Asadi
جمعه 05 تیر 1388, 23:31 عصر
[/code]
مطمعنم گیر همین MeasureString بودی ...



دوست عزیز Mani زدی تو خال من خودم از روشی که گفتی می خواستم برم اما نمی تونستم اندازه رشته رو پیدا کنم و برای همین دست به کار های عجیبی (مثل اضافه کردن Space به آخر متن ها و...) زدم.
البته هنوز روش شما رو امتحان نکردم ولی امیدوارم درست بشه. به هر حال از وقتی که گذاشتید خیلی متشکرم.

Navid Asadi
یک شنبه 07 تیر 1388, 23:46 عصر
نه دوست نشد.
البته روش شما کاملا درست است اما زمانی که ما یک Rich Text box داشته باشیم و در اون 10 کنیم مشکل همچنان پا بر جاست!
ممنون میشم اگه بازم کمکم کنید.

Navid Asadi
سه شنبه 09 تیر 1388, 10:58 صبح
کمک............................................ .........

Mani_rf
چهارشنبه 10 تیر 1388, 17:17 عصر
سلام ،‌ ببخشید دیر جواب می دم ، من یک مدتی بدجور سرم شلوغ شده کمتر می توانم بیام.
در مورد RichTextBox تاحالا امتحان نکردم اما احتمالا اگر اون را هم خط به خط بخوانی و تو Page بنویسی نباید مشکلی پیش بی آید!!!

Navid Asadi
چهارشنبه 10 تیر 1388, 20:10 عصر
این حرفتون کاملا درسته اما وقت گیره

Mani_rf
چهارشنبه 10 تیر 1388, 20:40 عصر
شما که قرار نیست خط به خط متن را بنویسید , شما فقط یک حلقه For نیاز داری که خط به خط برات بخونه و بنویسه ؛ از لحاظ اجرایی هم زمان زیادی از کاربرت نمی گیره.
در هر صورت من مطمعنم که امکان RightToLeft نداره.
اگر نظری داری بگو روش کار می کنیم . بلا خره شاید یه روزی به کار خودم هم بیاد.

Navid Asadi
چهارشنبه 10 تیر 1388, 21:41 عصر
نه اگه به ذهنم رسید حتما
به هر حال ممنون