Keep going with PrintDocument things. This article is a continuation of:
Introducing PrintDocument Component
Setting Font for PrintDocument Printing
Still using similar UI, we only change the code:
I'll create a function for printing that returns the height of string value character. The height value will become a reference to set y position for the next row.
Public Function PrintCellText(ByVal strValue As String, ByVal x As Integer, ByVal y As Integer, _
ByVal w As Integer, _
ByVal e As System.Drawing.Printing.PrintPageEventArgs, _
Font As Font) As Integer
'declare new rectangle
Dim cellRect As RectangleF = New RectangleF()
'positioning rectangle
cellRect.Location = New Point(x, y)
'setting size of the rectangle, automatically adjust with string character size
'(auto fit, auto size)
cellRect.Size = New Size(w, CInt(e.Graphics.MeasureString(strValue, Font, w, _
StringFormat.GenericTypographic).Height))
'defining text for printing
e.Graphics.DrawString(strValue, Font, Brushes.Black, cellRect)
Return y + cellRect.Size.Height
End Function
In this PrintCellText function, we print a string inside a rectangle. This rectangle will adjust its size to the string value. Then we can get height value by rectangle size. However, we must assign width value manually.
Dim fnt As Font = New Font("Arial", 11, FontStyle.Regular, GraphicsUnit.Point)
Set the Event PrintPage as below:
Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) _
Handles PrintDocument1.PrintPage
Dim CurX As Integer = 50
Dim CurY As Integer = 50
Dim iWidth As Integer = 500
CurY = PrintCellText("Text on 1st row.", CurX, CurY, iWidth, e, fnt)
CurY = PrintCellText("Text on 2nd row.", CurX, CurY, iWidth, e, fnt)
CurY = PrintCellText("Text on 3rd row.", CurX, CurY, iWidth, e, fnt)
CurY = PrintCellText("Text on 4th row.", CurX, CurY, iWidth, e, fnt)
End Sub
Event button1_click to trigger printing.
Private Sub Button1_Click(sender As Object, e As EventArgs) _
Handles Button1.Click
PrintDocument1.Print()
End Sub
Complete code:
Public Class Form1
Dim fnt As Font = New Font("Arial", 11, FontStyle.Regular, GraphicsUnit.Point)
Public Function PrintCellText(ByVal strValue As String, ByVal x As Integer, ByVal y As Integer, _
ByVal w As Integer, _
ByVal e As System.Drawing.Printing.PrintPageEventArgs, _
Font As Font) As Integer
ByVal w As Integer, _
ByVal e As System.Drawing.Printing.PrintPageEventArgs, _
Font As Font) As Integer
'declare new rectangle
Dim cellRect As RectangleF = New RectangleF()
'positioning rectangle
cellRect.Location = New Point(x, y)
'setting size of rectangle, automatically adjust wirh string character size
cellRect.Size = New Size(w, CInt(e.Graphics.MeasureString(strValue, Font, w, _
StringFormat.GenericTypographic).Height))
'defining text for printing
e.Graphics.DrawString(strValue, Font, Brushes.Black, cellRect)
Return y + cellRect.Size.Height
End Function
Private Sub Button1_Click(sender As Object, e As EventArgs) _
Handles Button1.Click
PrintDocument1.Print()
End Sub
Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) _
Handles PrintDocument1.PrintPage
Dim CurX As Integer = 50
Dim CurY As Integer = 50
Dim iWidth As Integer = 500
CurY = PrintCellText("Text on 1st row.", CurX, CurY, iWidth, e, fnt)
CurY = PrintCellText("Text on 2nd row.", CurX, CurY, iWidth, e, fnt)
CurY = PrintCellText("Text on 3rd row.", CurX, CurY, iWidth, e, fnt)
CurY = PrintCellText("Text on 4th row.", CurX, CurY, iWidth, e, fnt)
End Sub
End Class
The next article will discuss text alignment. If there is any question, please comment below.
Happy coding!
Sumber http://rani-irsan.blogspot.com
EmoticonEmoticon