Senin, 03 Agustus 2020

Vb.Net: Printdocument Menertibkan Alignment

Ini merupakan artikel berkesinambungan jadi baca juga artikel sebelumnya:
Mengenal Komponen PrintDocument
Mengatur Font Printing
Mengatur Jarak Antar Baris secara Otomatis

Kita mau lanjut dari postingan sebelumnya. Tapi pertama-tama kita akan coba memahami tentang Alignment dan bagaimana cara kerja nya. Alignment ada horizontal dan vertikal.
Jika dikombinasikan antara rata kiri, kanan dan tengah maka akan ada 9 jenis adalah:
- Atas Kiri
- Atas Tengah
- Atas Kanan
- Tengah Kiri
- Tengah Tengah
- Tengah Kanan
- Bawah Kiri
- Bawah Tengah
- Bawah Kanan



Masih menggunakan yang sama:



Kombinasi alignment ini disimpan dalam object StringFormat. Kita akan mendeklarasikan 9 jenis StringFormat ini ke dalam 9 object seperti berikut:

Dim TopLeft As StringFormat = New StringFormat()
Dim TopCenter As StringFormat New StringFormat()
Dim TopRight As StringFormat New StringFormat()
Dim MidLeft As StringFormat New StringFormat()
Dim MidCenter As StringFormat New StringFormat()
Dim MidRight As StringFormat New StringFormat()
Dim BottomLeft As StringFormat New StringFormat()
Dim BottomCenter As StringFormat New StringFormat()
Dim BottomRight As StringFormat New StringFormat() 

Kemudian kita atur format saat event Form1_Load()

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

  TopLeft.LineAlignment = StringAlignment.Near
  TopLeft.Alignment = StringAlignment.Near

  TopCenter.LineAlignment = StringAlignment.Near
  TopCenter.Alignment = StringAlignment.Center

  TopRight.LineAlignment = StringAlignment.Near
  TopRight.Alignment = StringAlignment.Far

  MidLeft.LineAlignment = StringAlignment.Center
  MidLeft.Alignment = StringAlignment.Near

  MidCenter.LineAlignment = StringAlignment.Center
  MidCenter.Alignment = StringAlignment.Center

  MidRight.LineAlignment = StringAlignment.Center
  MidRight.Alignment = StringAlignment.Far

  BottomLeft.LineAlignment = StringAlignment.Far
  BottomLeft.Alignment = StringAlignment.Near

  BottomCenter.LineAlignment = StringAlignment.Far
  BottomCenter.Alignment = StringAlignment.Center

  BottomRight.LineAlignment = StringAlignment.Far
  BottomRight.Alignment = StringAlignment.Far

End Sub

Untuk melihat perbedaannya lebih jelas kita coba format ini satu per satu yah. Bagian dengan warna kuning adalah yang akan Rani ubah untuk sample selanjutnya.

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

     Dim cellRect As RectangleF
     cellRect = New RectangleF()
     cellRect.Location = New Point(CurX, CurY)
     cellRect.Size = New Size(iWidth, CurY + 25)

     e.Graphics.DrawString("Top Left", Font, Brushes.Black, cellRect, TopLeft)
     e.Graphics.DrawRectangle(Pens.Black, Rectangle.Round(cellRect))

End Sub

Jangan lupa event button click untuk mentrigger proses printing.

Private Sub Button1_Click(sender As Object, e As EventArgs) _
    Handles Button1.Click
    PrintDocument1.Print()
End Sub

Kita coba run dan print:


Hasil print sebagai berikut:



Kita coba format lainnya, buah bagian baris DrawString nya saja dan run.

e.Graphics.DrawString("Top Center", Font, Brushes.Black, cellRect, TopLeft)



e.Graphics.DrawString("Top Right", Font, Brushes.Black, cellRect, TopLeft)


e.Graphics.DrawString("Middle Left", Font, Brushes.Black, cellRect, TopLeft)


e.Graphics.DrawString("Middle Center", Font, Brushes.Black, cellRect, TopLeft)


e.Graphics.DrawString("Middle Right", Font, Brushes.Black, cellRect, TopLeft)


e.Graphics.DrawString("Bottom Left", Font, Brushes.Black, cellRect, TopLeft)


e.Graphics.DrawString("Bottom Center", Font, Brushes.Black, cellRect, TopLeft)


e.Graphics.DrawString("Bottom Right", Font, Brushes.Black, cellRect, TopLeft)


Sekarang kita implementasikan pada function yang kita buat pada artikel sebelum nya.
Rani akan menambahkan format pada parameter function, bagian yang diubah diwarnai kuning.

Public Function PrintCellText(ByVal strValue As String, ByVal x As Integer, ByVal y As Integer, _
                            ByVal As Integer, _
                            ByVal As System.Drawing.Printing.PrintPageEventArgs, _
                            ByVal Font As FontByVal Format As StringFormatAs Integer

    Dim cellRect As RectangleF = New RectangleF()
    cellRect.Location = New Point(x, y)


    cellRect.Size = New Size(w, CInt(e.Graphics.MeasureString(strValue, Font, w,
                              StringFormat.GenericTypographic).Height))

    e.Graphics.DrawString(strValue, Font, Brushes.Black, cellRect, Format)

    Return y + cellRect.Size.Height
End Function

Ukuran vertikal dari rectangle pada function di atas otomatis menyesuaikan dengan banyak huruf pada teks yang mau dicetak, sementara panjang kesamping (width) diputuskan manual melalui parameter w. Karena itu dalam fungsi ini penggunaan alignment hanya akan terlihat secara horizontal dan saya akan pakai alignment top untuk vertikal. Event PrintPage kita ubah 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("Align Left Text.", CurX, CurY, iWidth, e, fnt, TopLeft)
     CurY = PrintCellText("Align Center Text.", CurX, CurY, iWidth, e, fnt, TopCenter)
     CurY = PrintCellText("Align Right Text.", CurX, CurY, iWidth, e, fnt, TopRight)

End Sub

Kita run kemudia print, karenanya selaku berikut:


Vertical alignment akan lebih tampakfungsi nya dikala kita membuat layout report yang lebih kompleks dan report berupa tabel yang mau kita bahas pada postingan selanjutnya.




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


EmoticonEmoticon

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