Data yang dicetak dalam contoh artikel tersebut cukup pendek dan simple. Kita coba ubah dengan memperpanjang beberapa text dalam cell.
Sub Data_Load()
dt = New DataTable
With dt.Columns
.Add("code", Type.GetType("System.String"))
.Add("name", Type.GetType("System.String"))
.Add("address", Type.GetType("System.String"))
End With
Dim ItemRow As DataRow
dt = New DataTable
With dt.Columns
.Add("code", Type.GetType("System.String"))
.Add("name", Type.GetType("System.String"))
.Add("address", Type.GetType("System.String"))
End With
Dim ItemRow As DataRow
ItemRow = dt.NewRow()
ItemRow("code") = "A001"
ItemRow("name") = "Dwi Nuraeni Permata Andikasari"
ItemRow("address") = "Jl. Linggawastu No.15, Tamansari, " & _
"Kec. Bandung Wetan, Kota Bandung, Jawa Barat 40116"
"Kec. Bandung Wetan, Kota Bandung, Jawa Barat 40116"
dt.Rows.Add(ItemRow)
temRow = dt.NewRow()
ItemRow("code") = "A002"
ItemRow("name") = "Kania Desiani Tri Hapsari Ardiana"
ItemRow("address") = "Jakarta"
dt.Rows.Add(ItemRow)
ItemRow("code") = "A002"
ItemRow("name") = "Kania Desiani Tri Hapsari Ardiana"
ItemRow("address") = "Jakarta"
dt.Rows.Add(ItemRow)
ItemRow = dt.NewRow()
ItemRow("code") = "A002"
ItemRow("name") = "Naufal Hartanto"
ItemRow("address") = "Medan"
dt.Rows.Add(ItemRow)
End Sub
Tanpa mengubah code lainnya, hasilnya cukup berantakan.
Lalu bagaimana supaya rapi? Kita masih tetep menggunakan function yang sama tapi ada sedikit tambahan trik pada event PrintDocument1_PrintPage.
Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) _
Handles PrintDocument1.PrintPage
'titik awal diambil dari margin top
Dim CurY As Integer = yZero
'print judul hanya di halaman pertama
If iPage = 0 Then
CurY = pf.PrintCellText("Member Data", CurY, xZero, PWArea, e, pf.FntTitle, pf.MidCenter)
End If
'memberi jarak judul dan tabel
CurY = CurY + 10
'code untuk handle jika lebih dari satu halaman
If iPage > 0 Then CurY = yZero
'menyimpan teks header dalam array
Dim ColHeader() As String = {"Member Code", "Member Name", "Address"}
'menyimpan lebar kolom dalam array
'lebar diambil dari proporsi lebar area printing
Dim ColWidth() As Integer = {CInt(PWArea * 0.3), CInt(PWArea * 0.3), CInt(PWArea * 0.4)}
'posisi x awal tiap kolom
Dim ColX(ColWidth.Length - 1) As Integer
'lebar yang telah digunakan dalam putaran
'untuk menghitung posisi awal kolom
Dim totColWidth As Integer = xZero
'variable untuk menampung nilai tinggi karakter yang di-print
Dim iResult As Integer
For i As Integer = 0 To ColWidth.Length - 1
'menghitung posisi x awal tiap kolom
ColX(i) = totColWidth : totColWidth = totColWidth + ColWidth(i)
'print table header
iResult = pf.PrintCellText(ColHeader(i), ColX(i), CurY, ColWidth(i), e, _
pf.FntTableHeader, pf.MidCenter, False)
Next
'membuat kotak mengelilingi cell
For i As Integer = 0 To ColWidth.Length - 1
e.Graphics.DrawRectangle(Pens.Black, ColX(i), CurY, ColWidth(i), iResult - CurY)
Next
'ambil posisi y dari tinggi char yang terakhir di-print
CurY = iResult
Dim iMore As Integer = 0
Do While r <= dt.Rows.Count - 1
'print nilai masing-masing cell
iResult = pf.PrintCellText(dt.Rows(r)("code"), ColX(0), CurY, ColWidth(0), e, _
pf.FntTableCell, pf.MidLeft, False)
If iResult > iMore Then iMore = iResult
iResult = pf.PrintCellText(dt.Rows(r)("name"), ColX(1), CurY, ColWidth(1), e, _
pf.FntTableCell, pf.MidLeft, False)
If iResult > iMore Then iMore = iResult
iResult = pf.PrintCellText(dt.Rows(r)("address"), ColX(2), CurY, ColWidth(2), e, _
pf.FntTableCell, pf.MidLeft, False)
If iResult > iMore Then iMore = iResult
'membuat kotak mengelilingi cell
For i As Integer = 0 To ColWidth.Length - 1
e.Graphics.DrawRectangle(Pens.Black, ColX(i), CurY, ColWidth(i), iMore - CurY)
Next
'ambil posisi y dari tinggi char yang terakhir di-print
CurY = iMore
'jika sudah 90% hari tinggi print area, halaman baru
If CurY >= 0.9 * PHArea Then
e.HasMorePages = True
iPage += 1
r += 1
Return
End If
r += 1
Loop
If r = dt.Rows.Count Then e.HasMorePages = False
End Sub
Untuk kode lainnya masih sama, jadi berikut kode lengkapnya:
UI juga masih sama:
Dan saat kita coba run dan print hasilnya sebagai berikut:
0 Comments