La verdad es que es un poco complicado......pero una opción podría ser esta...
(El ejemplo utiliza los controles PrintDocument, PrintPreviewDialog, PageSetupDialog y PrintDialog)
Private Sub btnPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrint.Click
Try
'especifica els paràmetres de la pàgina actual
PrintDocument1.DefaultPageSettings = OpcionesImprPagina
'especifica documento para cuadro de diálogo de impresión a mostrar
CadenaImpr = RichTextBox1.Text
PrintDialog1.Document = PrintDocument1
Dim result As DialogResult = PrintDialog1.ShowDialog()
If result = DialogResult.OK Then PrintDocument1.Print()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Dim numCaract As Integer
Dim numLineas As Integer
Dim strParaPagina As String
Dim strFormato As New StringFormat()
'define un rectángulo basándose en la configuración de página
Dim rectDibujar As New RectangleF(e.MarginBounds.Left, e.MarginBounds.Top, e.MarginBounds.Width, e.MarginBounds.Height)
'define un area para calcular el texto que cabe en una página
'diminuye en un alínea la altura para asegurar que el texto no se sale
Dim MedidaTamaño As New SizeF(e.MarginBounds.Width, e.MarginBounds.Height - FuenteImpr.GetHeight(e.Graphics))
'cuando escribe cadenas largas, las separa entre palabras
strFormato.Trimming = StringTrimming.Word
'calcula cuántos caracteres y líneas pueden caber basándose en medidatamaño
e.Graphics.MeasureString(CadenaImpr, FuenteImpr, MedidaTamaño, strFormato, numCaract, numLineas)
'calcula las cadenas que caben en una página
strParaPagina = CadenaImpr.Substring(0, numCaract)
'imprime la cadena contenida en la página actual
e.Graphics.DrawString(strParaPagina, FuenteImpr, Brushes.Black, rectDibujar, strFormato)
'si hay más texto, indica que hay más páginas
If numCaract < CadenaImpr.Length Then
'resta el texto que ya se ha impreso de la cadena
CadenaImpr = CadenaImpr.Substring(numCaract)
e.HasMorePages = True
Else
e.HasMorePages = False
'se ha impreso todo el texto, restaura la cadena
CadenaImpr = RichTextBox1.Text
End If
End Sub
Private Sub btnSetup_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetup.Click
Try
PageSetupDialog1.PageSettings = OpcionesImprPagina
PageSetupDialog1.ShowDialog()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
Private Sub btnPreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPreview.Click
Try
'especificar las opciones de la página actual
PrintDocument1.DefaultPageSettings = OpcionesImprPagina
'especifica documento para cuadro de diálogo de impresión y mostrar
CadenaImpr = RichTextBox1.Text
PrintPreviewDialog1.Document = PrintDocument1
PrintPreviewDialog1.ShowDialog()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
-ejemplo extraído del manual de VB.NET de Michael Halvorson, editorial McGrawhill-
Espero que te sirva. Yo es el que utilizo cuando tengo que imprimir largos textos des de un textbox (richtextbox),...aunque trato de evitarlo.
Saludos,