PrintDocument Exception

  • Thread starter Thread starter Igor
  • Start date Start date
I

Igor

Hi, I have a problem when I attempt to utilize the
PrintDocument component. I basically copy word for word
the code provided under the PrintDocument overview help,
but I keep getting the same exception. The message
states: "The data area passed to a system call is too
small". If anyone has an idea about what this means or
how to fix it, please let me know. THanks.
 
Hello,

Igor said:
Hi, I have a problem when I attempt to utilize the
PrintDocument component. I basically copy word for word
the code provided under the PrintDocument overview help,
but I keep getting the same exception. The message
states: "The data area passed to a system call is too
small". If anyone has an idea about what this means or
how to fix it, please let me know. THanks.

Post some code.

Regards,
Herfried K. Wagner
 
Here is the entire code

Imports System.IO
Imports System.Drawing
Imports System.Drawing.Printing
Public Class PrintingExample
Inherits System.Windows.Forms.Form
Private components As System.ComponentModel.Container
Private printButton As System.Windows.Forms.Button
Private printFont As Font
Private streamToPrint As StreamReader

Public Sub New()
' The Windows Forms Designer requires the
following call.
InitializeComponent()
End Sub

' The Click event is raised when the user clicks the
Print button.
Private Sub printButton_Click(ByVal sender As Object,
ByVal e As EventArgs)
Try
streamToPrint = New StreamReader
("C:\trash.txt")
Try
printFont = New Font("Arial", 10)
Dim pd As New PrintDocument
AddHandler pd.PrintPage, AddressOf
Me.pd_PrintPage
pd.Print()
Finally
streamToPrint.Close()
End Try
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub

' The PrintPage event is raised for each page to be
printed.
Private Sub pd_PrintPage(ByVal sender As Object,
ByVal ev As PrintPageEventArgs)
Dim linesPerPage As Single = 0
Dim yPos As Single = 0
Dim count As Integer = 0
Dim leftMargin As Single = ev.MarginBounds.Left
Dim topMargin As Single = ev.MarginBounds.Top
Dim line As String = Nothing

' Calculate the number of lines per page.
linesPerPage = ev.MarginBounds.Height /
printFont.GetHeight(ev.Graphics)

' Print each line of the file.
While count < linesPerPage
line = streamToPrint.ReadLine()
If line Is Nothing Then
Exit While
End If
yPos = topMargin + count * printFont.GetHeight
(ev.Graphics)

ev.Graphics.DrawString(line, printFont,
Brushes.Black, leftMargin, yPos, New StringFormat)

count += 1
End While

' If more lines exist, print another page.
If Not (line Is Nothing) Then
ev.HasMorePages = True
Else
ev.HasMorePages = False
End If
End Sub


' The Windows Forms Designer requires the following
procedure.
Private Sub InitializeComponent()
Me.components = New
System.ComponentModel.Container
Me.printButton = New System.Windows.Forms.Button

Me.AutoScaleBaseSize = New System.Drawing.Size(5,
13)
Me.ClientSize = New System.Drawing.Size(504, 381)
Me.Text = "Print Example"

printButton.ImageAlign =
System.Drawing.ContentAlignment.MiddleLeft
printButton.Location = New System.Drawing.Point
(32, 110)
printButton.FlatStyle =
System.Windows.Forms.FlatStyle.Flat
printButton.TabIndex = 0
printButton.Text = "Print the file."
printButton.Size = New System.Drawing.Size(136,
40)
AddHandler printButton.Click, AddressOf
printButton_Click

Me.Controls.Add(printButton)
End Sub

' This is the main entry point for the
application.
Public Shared Sub Main()
Application.Run(New PrintingExample)
End Sub

End Class
 
Back
Top