Rabu, 19 Agustus 2020

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

It's me again. Masih bahas perihal penggunaan PrintDocument untuk printing/reporting. Lanjutan dari postingan ini ya: Mengenal Komponen PrintDocument Mengatur Font Printing Tetep UI yang sama kita pakai ya, cuma code nya kita ubah. Klo di permulaan-awal kita hitung manual posisi y (vertikal) object string yang mau di print. Sekarang kita akan membuatnya ter-generate otomatis dengan menciptakan 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()     'memilih posisi permulaan persegi panjang/ rectangle     cellRect.Location = New Point(x, y)     'mengontrol 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 mau di print     e.Graphics.DrawString(strValue, Font, Brushes .Black, cellRect)     Return y + cellRect.Size.Height End Function Intinya function  PrintCellText  ini mencetak string dalam suatu persegi panjang. Persegi panjang ini ukuran nya akan menyesuaikan dengan panjang abjad string secara vertikal. Untuk lebar sudah ditentukan. Semacam multiple line ke bawah gitu. Deklarasi font yang hendak 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()      'memilih posisi awal persegi panjang/ rectangle     cellRect.Location = New Point(x, y)      'mengontrol 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 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 akibatnya selaku berikut. Sampai disini, klo ada pertanyaan komen di bawah ya. Next article kita bakal bahas lebih lanjut soal RectangleF untuk alignment .
Sumber http://rani-irsan.blogspot.com


EmoticonEmoticon