Setelah teladan simple yang Rani kasih di artikel sebelumnya:
Data yang dicetak dalam pola 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 mengganti code yang lain, alhasil cukup berantakan.
Lalu bagaimana agar rapi? Kita masih tetep menggunakan function yang sama namun ada sedikit komplemen 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 cuma 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 permulaan tiap kolom
Dim ColX(ColWidth.Length - 1) As Integer
'lebar yang telah digunakan dalam putaran
'untuk menjumlah posisi awal kolom
Dim totColWidth As Integer = xZero
'variable untuk memuat nilai tinggi aksara yang di-print
Dim iResult As Integer
For i As Integer = 0 To ColWidth.Length - 1
'menghitung posisi x permulaan 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
'menciptakan 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
'jikalau telah 90% hari tinggi print area, halaman gres
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 isyarat yang lain masih sama, jadi berikut isyarat lengkapnya:
UI juga masih sama:
Dan saat kita coba run dan print jadinya selaku berikut:
Sumber http://rani-irsan.blogspot.com
EmoticonEmoticon