It's me again. Masih bahas tentang penggunaan PrintDocument untuk printing/reporting.
Lanjutan dari artikel ini ya:
Mengenal Komponen PrintDocument
Mengatur Font Printing
Tetep UI yang sama kita pakai ya, cuma code nya kita ubah.
Klo di awal-awal kita hitung manual posisi y (vertikal) object string yang akan di print. Sekarang kita akan membuatnya ter-generate otomatis dengan membuat function berikut:
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
'deklarasikan persegi panjang/ rectangle
Dim cellRect As RectangleF = New RectangleF()
'menentukan posisi awal persegi panjang/ rectangle
cellRect.Location = New Point(x, y)
'mengatur ukuran persegi panjang/ rectangle, menyesuaikan jumlah karakter string
cellRect.Size = New Size(w, CInt(e.Graphics.MeasureString(strValue, Font, w, _
StringFormat.GenericTypographic).Height))
'mendefinisikan text yang akan di print
e.Graphics.DrawString(strValue, Font, Brushes.Black, cellRect)
Return y + cellRect.Size.Height
End Function
Intinya function PrintCellText ini mencetak string dalam sebuah persegi panjang. Persegi panjang ini ukuran nya akan menyesuaikan dengan panjang karakter string secara vertikal. Untuk lebar sudah ditentukan. Semacam multiple line ke bawah gitu.
Deklarasi font yang akan kita gunakan.
Dim fnt As Font = New Font("Arial", 11, FontStyle.Regular, GraphicsUnit.Point)
Kita atur Event PrintPage nya sebagai berikut:
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 untuk mentrigger proses printing.
Private Sub Button1_Click(sender As Object, e As EventArgs) _
Handles Button1.Click
PrintDocument1.Print()
End Sub
Kode lengkapnya sebagai berikut:
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
'deklarasikan persegi panjang/ rectangle
Dim cellRect As RectangleF = New RectangleF()
'menentukan posisi awal persegi panjang/ rectangle
cellRect.Location = New Point(x, y)
'mengatur ukuran persegi panjang/ rectangle, menyesuaikan jumlah karakter string
cellRect.Size = New Size(w, CInt(e.Graphics.MeasureString(strValue, Font, w, _
StringFormat.GenericTypographic).Height))
'mendefinisikan text yang akan di print
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
Kita coba run.
Kemudian klik Button 1. Dan proses printing ajan tereksekusi.
Untuk simulasi printing Rani pakai pdf printer, dan hasilnya sebagai berikut.
Sampai disini, klo ada pertanyaan komen di bawah ya. Next article kita bakal bahas lebih lanjut soal RectangleF untuk alignment.
0 Comments