Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

Problem with printing on generic printer.

Posted on 2004-04-21
1
Medium Priority
?
769 Views
Last Modified: 2013-12-20
Hello everyone I have problem when I try to print my textboxes on generic printer (STAR Tsp550 II) ( That printer is used in stores or snack bars or restaurants , you get recipe on that kind of printer -it print only text)

So when I print my form on normal printer there is no problem , But when I try tu print it on generic one I get this message:  

 An unhandled exception of type 'System.ComponentModel.Win32Exception' occurred in system.drawing.dll

Additional information: The data area passed to a system call is too small

AND MY CODE : PrintDocument1.Print() ------------- IS GREEN.

I use visual studio.NET 2002.


PLEASE HELP.

P.S.  I can normally print things on that printer from word or excel.
0
Comment
Question by:newbie22
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
1 Comment
 

Accepted Solution

by:
kidcarson earned 760 total points
ID: 10894577
Print raw data to the printer:

Imports System.IO
Imports System.Drawing.Printing
Imports System.Runtime.InteropServices

Public Class Form1
   Inherits System.Windows.Forms.Form

#Region " Windows Form Designer generated code "
#End Region

   ' Click event handler for a button - designed to show how to use the
   ' SendFileToPrinter and SendBytesToPrinter functions.
   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       ' Allow the user to select a file.
       Dim ofd As New OpenFileDialog()
       If ofd.ShowDialog(Me) Then
           ' Allow the user to select a printer.
           Dim pd As New PrintDialog()
           pd.PrinterSettings = New PrinterSettings()
           If pd.ShowDialog(Me) Then
               ' Print the file to the printer.
               RawPrinterHelper.SendFileToPrinter(pd.PrinterSettings.PrinterName, ofd.FileName)
           End If
       End If
   End Sub ' Button1_Click()

   ' Click event handler for a button - designed to show how to use the
   ' SendBytesToPrinter function to send a string to the printer.
   Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
       Dim s As String
       Dim pd As New PrintDialog()

       ' You need a string to send.
       s = "         Hello, this is a test" & vbCrLf
       s &= "         Second line"
       ' Open the printer dialog box, and then allow the user to select a printer.
       pd.PrinterSettings = New PrinterSettings()
       If pd.ShowDialog(Me) Then
           RawPrinterHelper.SendStringToPrinter(pd.PrinterSettings.PrinterName, s)
       End If

       ' a new page
       s = "         second line" & vbCrLf
       RawPrinterHelper.SendStringToPrinter(pd.PrinterSettings.PrinterName, s)

   End Sub ' Button2_Click()

End Class


Public Class RawPrinterHelper
   ' Structure and API declarions:
   <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> _
   Structure DOCINFOW
       <MarshalAs(UnmanagedType.LPWStr)> Public pDocName As String
       <MarshalAs(UnmanagedType.LPWStr)> Public pOutputFile As String
       <MarshalAs(UnmanagedType.LPWStr)> Public pDataType As String
   End Structure

   <DllImport("winspool.Drv", EntryPoint:="OpenPrinterW", _
      SetLastError:=True, CharSet:=CharSet.Unicode, _
      ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
   Public Shared Function OpenPrinter(ByVal src As String, ByRef hPrinter As IntPtr, ByVal pd As Long) As Boolean
   End Function
   <DllImport("winspool.Drv", EntryPoint:="ClosePrinter", _
      SetLastError:=True, CharSet:=CharSet.Unicode, _
      ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
   Public Shared Function ClosePrinter(ByVal hPrinter As IntPtr) As Boolean
   End Function
   <DllImport("winspool.Drv", EntryPoint:="StartDocPrinterW", _
      SetLastError:=True, CharSet:=CharSet.Unicode, _
      ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
   Public Shared Function StartDocPrinter(ByVal hPrinter As IntPtr, ByVal level As Int32, ByRef pDI As DOCINFOW) As Boolean
   End Function
   <DllImport("winspool.Drv", EntryPoint:="EndDocPrinter", _
      SetLastError:=True, CharSet:=CharSet.Unicode, _
      ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
   Public Shared Function EndDocPrinter(ByVal hPrinter As IntPtr) As Boolean
   End Function
   <DllImport("winspool.Drv", EntryPoint:="StartPagePrinter", _
      SetLastError:=True, CharSet:=CharSet.Unicode, _
      ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
   Public Shared Function StartPagePrinter(ByVal hPrinter As IntPtr) As Boolean
   End Function
   <DllImport("winspool.Drv", EntryPoint:="EndPagePrinter", _
      SetLastError:=True, CharSet:=CharSet.Unicode, _
      ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
   Public Shared Function EndPagePrinter(ByVal hPrinter As IntPtr) As Boolean
   End Function
   <DllImport("winspool.Drv", EntryPoint:="WritePrinter", _
      SetLastError:=True, CharSet:=CharSet.Unicode, _
      ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
   Public Shared Function WritePrinter(ByVal hPrinter As IntPtr, ByVal pBytes As IntPtr, ByVal dwCount As Int32, ByRef dwWritten As Int32) As Boolean
   End Function
   <DllImport("kernel32.dll", EntryPoint:="GetLastError", _
      SetLastError:=True, CharSet:=CharSet.Unicode, _
      ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _
   Public Shared Function GetLastError() As Int32
   End Function

   ' SendBytesToPrinter()
   ' When the function is given a printer name and an unmanaged array of  
   ' bytes, the function sends those bytes to the print queue.
   ' Returns True on success or False on failure.
   Public Shared Function SendBytesToPrinter(ByVal szPrinterName As String, ByVal pBytes As IntPtr, ByVal dwCount As Int32) As Boolean
       Dim hPrinter As IntPtr      ' The printer handle.
       Dim dwError As Int32        ' Last error - in case there was trouble.
       Dim di As DOCINFOW          ' Describes your document (name, port, data type).
       Dim dwWritten As Int32      ' The number of bytes written by WritePrinter().
       Dim bSuccess As Boolean     ' Your success code.

       ' Set up the DOCINFO structure.
       With di
           .pDocName = "My Visual Basic .NET RAW Document"
           .pDataType = "RAW"
       End With
       ' Assume failure unless you specifically succeed.
       bSuccess = False
       If OpenPrinter(szPrinterName, hPrinter, 0) Then
           If StartDocPrinter(hPrinter, 1, di) Then
               If StartPagePrinter(hPrinter) Then
                   ' Write your printer-specific bytes to the printer.
                   bSuccess = WritePrinter(hPrinter, pBytes, dwCount, dwWritten)
                   EndPagePrinter(hPrinter)
               End If
               EndDocPrinter(hPrinter)
           End If
           ClosePrinter(hPrinter)
       End If
       ' If you did not succeed, GetLastError may give more information
       ' about why not.
       If bSuccess = False Then
           dwError = GetLastError()
       End If
       Return bSuccess
   End Function ' SendBytesToPrinter()

   ' SendFileToPrinter()
   ' When the function is given a file name and a printer name,
    ' the function reads the contents of the file and sends the
   ' contents to the printer.
   ' Presumes that the file contains printer-ready data.
   ' Shows how to use the SendBytesToPrinter function.
   ' Returns True on success or False on failure.
   Public Shared Function SendFileToPrinter(ByVal szPrinterName As String, ByVal szFileName As String) As Boolean
       ' Open the file.
       Dim fs As New FileStream(szFileName, FileMode.Open)
       ' Create a BinaryReader on the file.
       Dim br As New BinaryReader(fs)
       ' Dim an array of bytes large enough to hold the file's contents.
       Dim bytes(fs.Length) As Byte
       Dim bSuccess As Boolean
       ' Your unmanaged pointer
       Dim pUnmanagedBytes As IntPtr

       ' Read the contents of the file into the array.
       bytes = br.ReadBytes(fs.Length)
       ' Allocate some unmanaged memory for those bytes.
       pUnmanagedBytes = Marshal.AllocCoTaskMem(fs.Length)
       ' Copy the managed byte array into the unmanaged array.
       Marshal.Copy(bytes, 0, pUnmanagedBytes, fs.Length)
       ' Send the unmanaged bytes to the printer.
       bSuccess = SendBytesToPrinter(szPrinterName, pUnmanagedBytes, fs.Length)
       ' Free the unmanaged memory that you allocated earlier.
       Marshal.FreeCoTaskMem(pUnmanagedBytes)
       Return bSuccess
   End Function ' SendFileToPrinter()

   ' When the function is given a string and a printer name,
   ' the function sends the string to the printer as raw bytes.
   Public Shared Function SendStringToPrinter(ByVal szPrinterName As String, ByVal szString As String)
       Dim pBytes As IntPtr
       Dim dwCount As Int32
       ' How many characters are in the string?
       dwCount = szString.Length()
       ' Assume that the printer is expecting ANSI text, and then convert
       ' the string to ANSI text.
       pBytes = Marshal.StringToCoTaskMemAnsi(szString)
       ' Send the converted ANSI string to the printer.
       SendBytesToPrinter(szPrinterName, pBytes, dwCount)
       Marshal.FreeCoTaskMem(pBytes)
   End Function
End Class
0

Featured Post

Tech or Treat! - Giveaway

Submit an article about your scariest tech experience—and the solution—and you’ll be automatically entered to win one of 4 fantastic tech gadgets.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

There’s a good reason for why it’s called a homepage – it closely resembles that of a physical house and the only real difference is that it’s online. Your website’s homepage is where people come to visit you. It’s the family room of your website wh…
Today, the web development industry is booming, and many people consider it to be their vocation. The question you may be asking yourself is – how do I become a web developer?
This tutorial walks through the best practices in adding a local business to Google Maps including how to properly search for duplicates, marker placement, and inputing business details. Login to your Google Account, then search for "Google Mapmaker…
The viewer will get a basic understanding of what section 508 compliance can entail, learn about skip navigation links, alt text, transcripts, and font size controls.
Suggested Courses

618 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question