PDA

View Full Version : مشکل در چاپ متن(با Print Document)



فرید نجفلو
شنبه 06 اسفند 1390, 16:13 عصر
سلام
به کد زیر دقت کنید:

Private Sub PrintDocument1_PrintPage(sender As System.Object, e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Dim g = e.Graphics
For i = 100 To 200 Step 20
DrawTextToGraph(g, "Counter " & i, Me.Font, New Point(100, i))
Next
End Sub
Public Shared Sub DrawTextToGraph(ByRef Grph As Graphics, TextToDrow As String, DrawFont As Font, Location As Point)
Dim ForeBrush = Brushes.Red
Grph.TranslateTransform(Location.X, Location.Y)
Grph.DrawString(TextToDrow, DrawFont, ForeBrush, 0, 0)
End Sub


همون طور که می بینید من می خوام چند تا متن رو روی گرافیک شئی print Doucument رسم کنم
داخل حلقه هم 6 عدد متن ایجا و رسم می کنم(آزمایشی)
اگه دقت کنید نقطه X همه برابر 100 است در نتیجه باید متن ها از سمت راست تو یه خط(ستون باشند)
نتیجه اینه:


83291

و نمی دونم مشکل از کجاست

فرید نجفلو
شنبه 06 اسفند 1390, 20:31 عصر
خوب انقدر جواب ندادین تا خودم پیداش کردم(البته دو روز الافم کرد!)
کدش رو میزارم شاید یه روز به درد کسی خورد
(به تعریف دوباره g در داخل حلقه دقت کنید)


Private Sub PrintDocument1_PrintPage(sender As System.Object, e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Dim hdc = e.Graphics.GetHdc
For i = 100 To 200 Step 20
Dim g As Graphics
g = Graphics.FromHdc(hdc)
DrawTextToGraph(g, "Counter " & i, Me.Font, New Point(100, i))
Next
End Sub
Public Shared Sub DrawTextToGraph(ByRef Grph As Graphics, TextToDrow As String, DrawFont As Font, Location As Point)
Dim ForeBrush = Brushes.Red
Grph.TranslateTransform(Location.X, Location.Y)
Grph.DrawString(TextToDrow, DrawFont, ForeBrush, 0, 0)
End Sub

Hossein Bazyan
یک شنبه 07 اسفند 1390, 00:00 صبح
سلام
برای صفحه جدید چه راهی پیشنهاد میکنید؟

فرید نجفلو
یک شنبه 07 اسفند 1390, 00:27 صبح
سلام
برای صفحه جدید چه راهی پیشنهاد میکنید؟

منظورتون رو کاملا متوجه نشدم
اگه منظورتون اینه که اگه تو یه صفحه جا نشد چی کار کنیم. اصول اینکار اینکه یک متغیر عمومی برای نگهداری نقطه ای که صفحه بعد از اونجا شروع می شه رو تعریف کنیم
مثلا اگه خط به خط چاپ می کنیم شماره خط
و در آخر این روال هم باید e.HasMorePages رو True کنیم تا یه صفحه دیگه درخواست کنه ازمون و تموم که شد False می کنی
البته کوتاه و ختصر توضیح دادم
و اینکه تا واقعا نیاز نداشته باشیم نباید از این روش استفاده کنیم این روش درسته که سطوح پایین تر رو در اختیار می زاره ولی این سطح پایینم درد سره خودشو داره(مثل من که دو روز الاف دو خط بالا بودم و البته نیاز داشتم)

Hossein Bazyan
یک شنبه 07 اسفند 1390, 01:53 صبح
منظورتون رو کاملا متوجه نشدم
اگه منظورتون اینه که اگه تو یه صفحه جا نشد چی کار کنیم. اصول اینکار اینکه یک متغیر عمومی برای نگهداری نقطه ای که صفحه بعد از اونجا شروع می شه رو تعریف کنیم
مثلا اگه خط به خط چاپ می کنیم شماره خط
و در آخر این روال هم باید e.HasMorePages رو True کنیم تا یه صفحه دیگه درخواست کنه ازمون و تموم که شد False می کنی
البته کوتاه و ختصر توضیح دادم
و اینکه تا واقعا نیاز نداشته باشیم نباید از این روش استفاده کنیم این روش درسته که سطوح پایین تر رو در اختیار می زاره ولی این سطح پایینم درد سره خودشو داره(مثل من که دو روز الاف دو خط بالا بودم و البته نیاز داشتم)
سلام

منظورم همینه اما با کد e.HasMorePages صفحه جدیدی بار نمیشه بلکه در همان صفحه چاپ میشه.
هر کار کردم نشد صفحات بعدی رو اضافه کنم

فرید نجفلو
یک شنبه 07 اسفند 1390, 11:40 صبح
سلام

منظورم همینه اما با کد e.HasMorePages صفحه جدیدی بار نمیشه بلکه در همان صفحه چاپ میشه.
هر کار کردم نشد صفحات بعدی رو اضافه کنم

شما یک پروژه جدید ایجاد کنید
یک کنترل Print Document و یک کنترل PrintPreviewControl به فرم اضافه و کد پایین رو داخل اون Paste کنید

Imports System.Drawing.Printing
Public Class Form1
Private PageNo As Integer = 1
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Me.PrintPreviewControl1.Rows = 2
Me.PrintPreviewControl1.Columns = 2
Me.PrintPreviewControl1.Document = Me.PrintDocument1
End Sub
Private Sub PrintDocument1_PrintPage(sender As System.Object, e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Dim fnt As New Font(Me.Font.FontFamily, 40)
Dim pnt As New Point(e.PageBounds.Width / 2, e.PageBounds.Height / 2)
e.Graphics.DrawString("This Is Page " & PageNo, fnt, Brushes.Red, pnt)
PageNo += 1
If PageNo > 4 Then
e.HasMorePages = False
Else
e.HasMorePages = True
End If
End Sub
End Class