puoi usare l'oggetto printDialog e printDocument

nell'evento PrintPage dell'oggetto printDocument puoi scrivere:

codice:
    Private Sub PrintDocument_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument.PrintPage
        Dim myFont As New System.Drawing.Font("Arial", 9)
        Dim myFormat As New Drawing.StringFormat()
        myFormat.FormatFlags = Drawing.StringFormatFlags.DirectionRightToLeft

        e.Graphics.DrawRectangle(New Drawing.Pen(Drawing.Brushes.Black), 100, 100, 627, 25)
        e.Graphics.DrawString("Ciao Mondo!", myFont, Drawing.Brushes.Black, 105, 105)

    End Sub
e poi nella tua routine di stampa, dopo aver impostato l'oggetto PrintDocument nella proprietà Document dell'oggetto PrintDialog:
codice:
Private Sub LanciaStampa
With Me.PrintDialog
    If .ShowDialog = Windows.Forms.DialogResult.OK Then
         .Document.Print()
    End If
End With
che ti richiama la stampa del Documet che viene creato ogni volta che scatta l'evento PrintPage

controllati questa classe:
System.Drawing.Printing.PrintPageEventArgs
in modo tale da personalizzare il documento

In ogni caso dai un'pcchiata al Crystal Report che trovi embedded nell'IDE visto che è abbastanza meno macchinoso rispetto all'oggetto PrintDocument