Private Sub pdoc_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
' Aqui Declare una variable que contenga la posición del último carácter impreso. Debes declararla
' como estática para que los siguiente eventos PrintPage puedan hacer referencia a ella.
Static intCurrentChar As Int32
' Aquí inicialicé la fuente que se va a utilizar en la impresión, como no tengo problemas de visión puse 12
' pero puedes cambiarla (es broma)no quiero que los que me lean digan, este Adonis no es serio con su trabajo .
Dim font As New Font("Microsoft Sans Serif", 12)
Dim intPrintAreaHeight, intPrintAreaWidth, marginLeft, marginTop As Int32
With PrintDocument1.DefaultPageSettings
' Aqui inicio las variables locales que contengan los límites del rectángulo del
' área de impresión e inicio las variables locales que contengan los valores de margen, que servirán
' de coordenadas X e Y para la esquina superior izquierda del rectángulo del
' área de impresión.
intPrintAreaHeight = .PaperSize.Height - .Margins.Top - .Margins.Bottom
intPrintAreaWidth = .PaperSize.Width - .Margins.Left - .Margins.Right
marginLeft = .Margins.Left ' Coordenada X
marginTop = .Margins.Top ' Coordenada Y
End With
' Aqui le ordeno que si el usuario ha seleccionado el modo Horizontal, cambie el alto y el ancho
' del área de impresión.
If PrintDocument1.DefaultPageSettings.Landscape Then
Dim intTemp As Int32
intTemp = intPrintAreaHeight
intPrintAreaHeight = intPrintAreaWidth
intPrintAreaWidth = intTemp
End If
' Aquí obligo a que calcule el número total de líneas en el documento a partir del alto del
' área de impresión y del alto de la fuente.
Dim intLineCount As Int32 = CInt(intPrintAreaHeight / font.Height)
' Y en esta inicio la estructura del rectángulo que define el área de impresión.
Dim rectPrintingArea As New RectangleF(marginLeft, marginTop, intPrintAreaWidth, intPrintAreaHeight)
' Cree una instancia de la clase StringFormat, que encapsula la información de diseño
' del texto, muestra las manipulaciones y las características de OpenType.
Dim fmt As New StringFormat(StringFormatFlags.LineLimit)
' Llamé a MeasureString para determinar el número de caracteres que caben en
' el rectángulo del área de impresión.
Dim intLinesFilled, intCharsFitted As Int32
e.Graphics.MeasureString(Mid(rtb.Text, intCurrentChar + 1), font, New SizeF(intPrintAreaWidth, intPrintAreaHeight), fmt, intCharsFitted, intLinesFilled)
' Y esto es ya para que se imprima el texto en la página.
e.Graphics.DrawString(Mid(rtb.Text, intCurrentChar + 1), font, Brushes.Black, rectPrintingArea, fmt)
' Hago avanzar el carácter actual hasta el último carácter impreso de esta página y lo coloco en la siguiente.
intCurrentChar += intCharsFitted
' Aqui el HasMorePages indica al módulo de impresión si debe desencadenarse otro
' evento PrintPage.
If intCurrentChar < rtb.Text.Length Then
e.HasMorePages = True
Else
e.HasMorePages = False
' Debe restablecer explícitamente intCurrentChar ya que es estática.
intCurrentChar = 0
End If
End Sub
Marcadores