469,640 Members | 1,579 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,640 developers. It's quick & easy.

How to print like the old ways

Hey,

I am just wondering if anyone has got any idea of setting up a new class
so that you could just print like the old ways with the printer class,
since I am writing a program that really requires simple black and white
text printing, but there is alot to print and it's needed at various
places, which is why I find that the new printing style with the
printdocument a bit too clumsy.

Any help would be appreciated.

thanks,

Pete
Nov 21 '05 #1
12 2157
Peter Lin wrote:
Hey,

I am just wondering if anyone has got any idea of setting up a new class
so that you could just print like the old ways with the printer class,
since I am writing a program that really requires simple black and white
text printing, but there is alot to print and it's needed at various
places, which is why I find that the new printing style with the
printdocument a bit too clumsy.

Any help would be appreciated.

thanks,

Pete


I believe I got this off microsoft site somewhere. just need the
printer name and the string your sending...

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

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

' 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 = Marshal.GetLastWin32Error()
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

Chris
Nov 21 '05 #2
Thank you Chris for the code.

Can you change the font using this class?

Pete
Nov 21 '05 #3
Peter Lin wrote:
Thank you Chris for the code.

Can you change the font using this class?

Pete


Never tried or looked into doing it.

Chris
Nov 21 '05 #4
i have a .ddl that makes a printing class....i can send it to you if ud like,
u can change the font if you require also
Nov 21 '05 #5
iwdu15 wrote:
i have a .ddl that makes a printing class....i can send it to you if ud like,
u can change the font if you require also

that would be superb. Thank you man.
Nov 21 '05 #6
sure, but just to give credit where its due, i did not write this by myself,
i used the code someone else gave me and did a little editing in it, so where
should i send the .dll to?
Nov 21 '05 #7
iwdu15 wrote:
sure, but just to give credit where its due, i did not write this by myself,
i used the code someone else gave me and did a little editing in it, so where
should i send the .dll to?

just to this email address that would be cool.
Nov 21 '05 #8
i sent it to the email in your profile....
Nov 21 '05 #9
iwdu15 wrote:
i sent it to the email in your profile....

Yep, got it and Thank you.

If you are interested, look at my "emulating VB6 printer" post.

Pete
Nov 21 '05 #10
not a problem, let me kno how it works out for ya, if you need more added on
to it, let me kno, and i can send you the source code if u want also, i have
a ton of free time, beign 16 and wanting to b a CS major, so if u want
anything more, just let me kno
Nov 21 '05 #11
iwdu15 wrote:
not a problem, let me kno how it works out for ya, if you need more added on
to it, let me kno, and i can send you the source code if u want also, i have
a ton of free time, beign 16 and wanting to b a CS major, so if u want
anything more, just let me know

That's very cool. I have just only recently picked up interest in
computer programing. I am doing a maths degree just now in UK, I know
how you feel at that age, the passion for something and the desire to
know more, very encouraging.

Pete
Nov 21 '05 #12
thanks, btw howd the class work out for you?
Nov 21 '05 #13

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

30 posts views Thread by Martin Bless | last post: by
12 posts views Thread by Michael Foord | last post: by
2 posts views Thread by Samantha | last post: by
48 posts views Thread by David J Patrick | last post: by
2 posts views Thread by Karlo Lozovina | last post: by
10 posts views Thread by Prisoner at War | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.