VB.NET: PrintDocument Mengatur Alignment

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

Kita mau lanjut dari artikel 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 yaitu:
- 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 karakter pada teks yang akan dicetak, sementara panjang kesamping (width) ditentukan manual melalui parameter w. Karena itu dalam fungsi ini penggunaan alignment hanya akan tampak 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, hasilnya sebagai berikut:


Vertical alignment akan lebih terlihat fungsi nya saat kita membuat layout report yang lebih kompleks dan report berupa tabel yang akan kita bahas pada artikel selanjutnya.



Post a Comment

1 Comments

Assalamualaikum mbak rani. Terimakasih sudah menulis tutorial yang sangat bermanfaat, saya punya pertanyaan mengenai width-nya atau lebar kertasnya mbak. berhubung printer kita berbeda, jadi lebar kertasnya ngga sama.
lebar 500 itu satuan nya apa ya mbak ? mm, px, inch, atau cm ? lebar kertas ku 58 mm mbak