Senin, 03 Agustus 2020

Vb.Net: Printdocument, Mengontrol Jarak Antar Baris Secara Otomatis


It's me again. Masih bahas tentang penggunaan PrintDocument untuk printing/reporting.
Lanjutan dari postingan ini ya:
Mengenal Komponen PrintDocument
Mengatur Font Printing

Tetep UI yang serupa kita pakai ya, hanya code nya kita ubah.



Klo di permulaan-permulaan 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 permulaan persegi panjang/ rectangle
    cellRect.Location = New Point(x, y)

    'menertibkan ukuran persegi panjang/ rectangle, menyesuaikan jumlah huruf string
    cellRect.Size = New Size(w, CInt(e.Graphics.MeasureString(strValue, Font, w, _
                              StringFormat.GenericTypographic).Height))

    'mendefinisikan text yang hendak 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 huruf string secara vertikal. Untuk lebar sudah diputuskan. 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()

    'memilih posisi awal persegi panjang/ rectangle
    cellRect.Location = New Point(x, y)

    'mengatur ukuran persegi panjang/ rectangle, menyesuaikan jumlah aksara string
    cellRect.Size = New Size(w, CInt(e.Graphics.MeasureString(strValue, Font, w, _
                              StringFormat.GenericTypographic).Height))

    'mendefinisikan text yang hendak 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 kesudahannya selaku berikut.



Sampai disini, klo ada pertanyaan komen di bawah ya. Next article kita bakal diskusikan lebih lanjut soal RectangleF untuk alignment.


Sumber http://rani-irsan.blogspot.com


EmoticonEmoticon

:)
:(
hihi
:-)
:D
=D
:-d
;(
;-(
@-)
:o
:>)
(o)
:p
:-?
(p)
:-s
8-)
:-t
:-b
b-(
(y)
x-)
(h)