PDA

View Full Version : سوال: مشکل در پرینت فارسی توسط PrintDocument



newbie2
یک شنبه 09 مرداد 1390, 01:00 صبح
سلام دوستان.
همون طور که از شناسه کابری من پیداست کاربر تازه هستم!!

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

سؤالم رو مطرح می‌کنم شاید شما دوستان بتونید کمکم کنید:

می‌خوام روی چاپگر با استفاده از ابزار PrintDocument متنی فارسی چاپ کنم.
گویا کد زیر باید این کار رو انجام بده:


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
PrintDocument1.Print()
End Sub





Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Dim Y_Alignment As New System.Drawing.StringFormat _
(StringFormatFlags.DirectionRightToLeft)
Y_Alignment.Alignment = StringAlignment.Near


e.Graphics.DrawString("سلام", New Font("Tahoma", 14, FontStyle.Bold), Brushes.Black, 200, 200, Y_Alignment)
e.HasMorePages = False
End Sub


اما مشکل اینجاست که متن چاپ شده (در اینجا "سلام") از چپ به راست و به صورت ناپیوسته چاپ می‌شه (یعنی شبیه این: م لا س):گیج:

هرچی گشتم تو هیچ سایتی راه حلی پیدا نکردم (نه این سایت و نه سایتظهای دیگه) حالا اگر دوستان لطفی بکنید و گره از کار من بگشایید دعای خیر این بنده کم‌ترین رو به جانب خودتون گسیل داشتید.

اگر آموزشی - تاپیک مخصوصی چیزی بود لطفا بیان کنید.
پیشاپیش از لطف شما سپاسگزارم.

Newbie2

Mani_rf
یک شنبه 09 مرداد 1390, 08:40 صبح
این مشکل ممکنه که از دوجا رخ بده :
حدث اولم درایور پرینتری که نصب کردی. (مورد اینطوری زیاد داشتیم، مخصوصا درمورد HP های 1300 ,1005 و 1006) . اگه امکانش را داری با یک پرینتر دیگه امتحان کن.
دوم این که با چه کدی داری متن را روی کاغذ رسم می کنی؟

newbie2
یک شنبه 09 مرداد 1390, 23:41 عصر
این مشکل ممکنه که از دوجا رخ بده :
حدث اولم درایور پرینتری که نصب کردی. (مورد اینطوری زیاد داشتیم، مخصوصا درمورد HP های 1300 ,1005 و 1006) . اگه امکانش را داری با یک پرینتر دیگه امتحان کن.
دوم این که با چه کدی داری متن را روی کاغذ رسم می کنی؟

جناب Mani_rf سلام؛
جواب سؤال دومتون رو که تو متن خود پرسشم نوشتم همون کد ساده برای شروع خوبه (البته اگه کار کنه!)

اما در مورد سؤال اول شما:
1- فعلا دارم رو پرینترهای مجازی کار می‌کنم (pdf سازها که با برنامه‌های دیگه کار کردن و تقریبا مشکلی نداشتن) مثل pdfFactory Pro و Microsoft XPS Document Writer؛ البته شاید لازم باشه با ویندوزهای دیگه و پرینترهای مجازی دیگه هم امتحان کنم(؟).
2- تو همون کد پست شماره یک (خط 11) اگر به جای DirectionRightToLeft از DirectionVertical استفاده کنم متن به همون شکل "سلام" (شکل مورد انتظار) ولی به شکل عمودی چاپ می‌شه (ولی تو حالت RightToLeft یا معمولی مشکل همون طوره).

دوباره از لطف شما از پاسخی که دادید سپاسگزارم.

پ. ن.:

1- زبان مورد استفاده VB .net 2010

2- مشخصات سیستم: Win7 64bit

3- پرینتر مورد استفاده: پرینتر مجازی: pdfFactory Pro و Microsoft XPS Document Writer که با برنامه‌های دیگه بدون مشکل خاصی کار می‌کنن.

4- با فونت‌هایی مثل B Zar - Arial و... امتحان شده و مشکل پابرجاست!!

Mani_rf
سه شنبه 11 مرداد 1390, 08:45 صبح
من کد خودت رو تو 1 پروژه جدید کپی کردم، و باتن را زدم . چاپ گرفت و هیچ مشکلی هم نداشت!

این کد :
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
PrintDocument1.Print()
End Sub
Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Dim Y_Alignment As New System.Drawing.StringFormat(StringFormatFlags.Dire ctionRightToLeft)
Y_Alignment.Alignment = StringAlignment.Near
e.Graphics.DrawString("سلام", New Font("Tahoma", 14, FontStyle.Bold), Brushes.Black, 200, 200, Y_Alignment)
e.HasMorePages = False
End Sub

مدل چاپگری که باهاش چاپ کردم Hp 1300 بود. من به PrintDocument قبلا زیاد کار کرده بودم و 1زمانی همه گزارش هامو با اون میگرفتم اما همچین مشکلی نداشتم، البته جز یک بار که روی سیستم یک مشتری این مشکل را داشت که همه چی را چپه چاپ میکرد!
فکر نمی کنم که با مشکل خاصی بر بخوری اما پیشنهاد می کنم که از برنامه های گزارش گیری استفاده کنی، هم خیلی سریعتر و راحت ترن، هم دقتشون بالاتره

newbie2
سه شنبه 11 مرداد 1390, 23:51 عصر
سلام به دوست گرامی، جناب Mani_rf.

اول به خاطر پاسخ شما تشکر می‌کنم.
دوم این که تو این سایت چرا این‌قدر مشارکت در تاپیک‌ها ضعیفه؟ (البته منظورم فقط این تاپیک نیست، تو خیلی از تاپیک‌ها تاپیک یه دفعه سکته کرده یا اصلا هیچ کس پاسخی نداده!)

اما بعد...
هنوز با چاپگر سخت‌افزاری امتحان نکردم اما با نصب چاپگر مجازی دیگه‌ای در همین ویندوز 7 و با امتحان برنامه در Win XP با چاپگر مجازی دیگه مشکل موقتا حل شد. ولی مشکل این‌جاست که آیا این احتمال وجود داره تا همین مشکل وقتی برنامه دست کاربر نهایی می‌رسه دوباره پیش بیاد؟ یعنی چاپگر با برنامه سازگار نباشه؟ در اون صورت آیا راه حلی برای جلوگیری یا جبران این مشکل (البته بدون تغییر دادن چاپگر چون کار هزینه بری است) وجود داره؟ (این سؤال رو مخصوصا می‌پرسم یکی به دلیل اهمیت خود موضوع، و دیگری چون گویا شما خودتون با این مشکل برخورد داشتین!)

به هر حال از پاسخ شما سپاسگزارم.
خدا نگهدارتون باشه

Mani_rf
چهارشنبه 12 مرداد 1390, 11:24 صبح
سلام. درباره بخش اول سوالت باید بگم که راستش من هم اصلا نمیدونم که چرا اینطوری شده، تا پارسال همه چیز خیلی عالی بود و دوستان زیادی که اطلاعات زیادی هم داشتن باهم بحث های علمی جالبی میکردن. ولی به یکباره همه چیز راکد شد.

اما قسمت دوم ، احتمالش خیلی کمه ، من تو چیزی حدود 5 سال فقط یک بار این مشکل را دیدم که درنظر گرفتنش خیلی منطقی نیست. اما پیشنهاد میکنم که از برنامه های گزارش گیری استفاده کنی، همونور که گفتم اونها برای انجام این کار ها خیلی دقیق تر طراحی شدند.

newbie2
چهارشنبه 12 مرداد 1390, 22:29 عصر
دوباره سلام!

از شما دوست خوبم به خاطر پاسخ‌هاتون سپاسگزارم.

من فکر می‌کردم ابزارهای گزارش گیری (مثل کریستال ریپورت) فقط با پایگاه داده کار می‌کنن(!). اگه اشتباه می‌کنم و از داده‌های معمولی (غیر از پایگاه داده و دیتابیس) مثل یک آرایه یا... هم می‌شه گزارش‌هایی ساخت می‌شه لطفی بکنید و آموزشی بدین یا اگه لینکی هست مرحمت کنید؟
(به هرحال لطفا تو پاسخ‌تون این رو هم در نظر بگیرید که من هم در VB .NET و هم در این سایت تازه وارد و تازه کار هستم!)

بز هم از شما تشکر می‌کنم و از پاسخ‌های دلسوزانه‌تون سپاسگزارم.

Mani_rf
پنج شنبه 13 مرداد 1390, 08:42 صبح
راستش زمان کافی برای این که براتون آموزش بزارم رو ندارم، اما می تونم در این حد براتون توضیح بدم که اونها یک DataSet و یا DataTable را میگیرند و اطلاعات درون آن را نمایش می دهند که شما می توانید آن را ازدرون برنامه به گزارش بفرستید.اگر اطلاعات خود را درون یک گرید نمایش می دهید کافی است تا DataSource گرید را به گزارش بفرستید تا آن را نمایش دهد.

newbie2
پنج شنبه 13 مرداد 1390, 22:21 عصر
دوست خوبم جناب Mani_rf، سلام.

از مشارکت و پاسخ‌های شما سپاسگزارم . امیدوارم که مشارکت دوستان در این سایت به سطح بالاتری برسه.

یه درخواست: می‌شه لطف کنید و چندتا سایت با اعضای فعال و رویکردی مشابه همین سایت برنامه‌نویس به زبان انگلیسی (یا فارسی) معرفی کنید؟

با تشکر از شما
خدا نگهدار

Mani_rf
جمعه 14 مرداد 1390, 19:09 عصر
راستش من قبل از اینکه فعالیتم رو تو این سایت آغاز کنم تو خیلی از سایت های مشابه گشت و گذار داشتم اما فعالترین سایتی که دیدم همینجا بود که به طور تخصصی به بحث های مرتبط می پرداخت. اما به عنوان سایت خارجی برای این کار (البته اینقدر معروف هست که نیاز به معرفی نداره) CodeProject هست که حتما با اون آشنایی داری

newbie2
یک شنبه 16 مرداد 1390, 01:02 صبح
سلام دوباره!!
دوست خوبم جناب Mani_rf،از شما تشکر می‌کنم.
خدا نگهدار همه دوستان برنامه‌نویس باشه.