VB.NET: PrintDocument, Mengatur Jarak Antar Baris secara Otomatis


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 StringByVal As IntegerByVal As Integer, _

                            ByVal w As Integer, _

                            ByVal e As System.Drawing.Printing.PrintPageEventArgs, _
                            Font As FontAs 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.

Post a Comment

0 Comments