Private WithEvents pdoc As New PrintDocument()
Private TextToPrint As String
Private FontSize As Integer
Private FontName As String
Private Sub pdoc_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles pdoc.PrintPage
Static intCurrentChar As Int32
Dim font As New Font(FontName, FontSize)
Dim intPrintAreaHeight, intPrintAreaWidth, marginLeft, marginTop As Int32
With pdoc.DefaultPageSettings
intPrintAreaHeight = .PaperSize.Height - .Margins.Top - .Margins.Bottom
intPrintAreaWidth = .PaperSize.Width - .Margins.Left - .Margins.Right
marginLeft = .Margins.Left
marginTop = .Margins.Top
End With
If pdoc.DefaultPageSettings.Landscape Then
Dim intTemp As Int32
intTemp = intPrintAreaHeight
intPrintAreaHeight = intPrintAreaWidth
intPrintAreaWidth = intTemp
End If
Dim intLineCount As Int32 = CInt(intPrintAreaHeight / font.Height)
Dim rectPrintingArea As New RectangleF(marginLeft, marginTop, intPrintAreaWidth, intPrintAreaHeight)
Dim fmt As New StringFormat(StringFormatFlags.LineLimit)
Dim intLinesFilled, intCharsFitted As Int32
e.Graphics.MeasureString(Mid(TextToPrint, intCurrentChar + 1), font, _
New SizeF(intPrintAreaWidth, intPrintAreaHeight), fmt, _
intCharsFitted, intLinesFilled)
e.Graphics.DrawString(Mid(TextToPrint, intCurrentChar + 1), font, _
Brushes.Black, rectPrintingArea, fmt)
intCurrentChar += intCharsFitted
If intCurrentChar < TextToPrint.Length Then
e.HasMorePages = True
Else
e.HasMorePages = False
intCurrentChar = 0
End If
End Sub
Private Sub doPrintPreview()
Dim ppd As New PrintPreviewDialog()
pdoc.DefaultPageSettings.Landscape = False
FontSize = 12
FontName = "Courier New"
Try
ppd.Document = pdoc
ppd.Icon = Me.Icon
ppd.Text = "Print Preview"
ppd.StartPosition = FormStartPosition.CenterScreen
ppd.ShowInTaskbar = True
ppd.WindowState = FormWindowState.Maximized
ppd.ShowDialog()
Catch exp As Exception
MessageBox.Show(exp.ToString, "Exception!")
End Try
End Sub