Printing a crystal report to a network printer in code

Ellis

Member
Joined
Mar 10, 2003
Messages
15
Location
England, United Kingdom
When I print to one printer on the network (HP LaserJet 8100 Series PCL 5e) the report comes out fine, however when I print to another printer on the network (RICOH Aficio 1022 PCL 5e) the report comes out as gobble-de-gook.

The printer drivers for both printers are installed on the client machine I use.

The machine is running on windows 2000.

I then downloaded vbnet_win_printtoprinter.exe from Crystal Decisions and ran the application, printing the sample reports to the two different printers again, the same thing happened.

It seems the font types aren
 
Hi,

May I know your script? I also neet to print using a network printer through script. I dont know how to call the network printer using a CreateFile(). I tried calling a local printer port and worked fine.

We can investigate on this together since I also need to specify fonts to printer by script since I will be printing a barcode label.

Thanks.
 
Hi Susana,

Is it a crystal report you are trying to print?
If so Id recomment having a look at the dotnet example from crystal decisions. Follow the link below...

http://support.crystaldecisions.com/communityCS/FilesAndUpdates/vbnet_win_printtoprinter.exe.asp
(This VB .NET Windows application demonstrates how to print a report directly to a printer at runtime using the engine object model. This application is for use with Crystal Reports for Visual Studio .NET and later versions.)


Change a font at runtime, Id recommend the example...

http://support.crystaldecisions.com/communityCS/FilesAndUpdates/vbnet_win_changefont.exe.asp
(This Visual Basic .NET sample Windows application demonstrates how to change the font of database and text field at runtime. This application is for use with Crystal Reports for Visual Studio .NET and later versions.)


As it is Ive solved my issue. My problem was resolved by re-installing the printer on the network and using a different driver.
To print to a network printer using script I used the PrintToPrinter method and under the PrinterName property I entered the url location of my network printer.


I hope you find these examples useful. I know how frustrating it can be when you cant get it to work.

If you need any more help please dont hesitate to ask (, although I cant guarantee Ill always have an answer, Ill try and help if I can).

Good luck.

Lee :p
 
Hi Lee,

Thanks for the tip. This could help me in my other printing problems. But unfortunately, this is not what I need at the moment.

I am trying to print a batch of records directly to a barcode printer, which is a network printer, using TCP/IP.

Initially (for investigation purposes), I have these scripts:

*******start code*******
Public Class PrintBarCode
Inherits System.Web.UI.Page
Public Const GENERIC_WRITE = &H40000000
Public Const OPEN_EXISTING = 3
Public Const FILE_SHARE_WRITE = &H2

Public Shared LPTPORT As String
Public Shared hPort As Integer
Public Shared retval As Integer
Public Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" ( _
ByVal lpFileName As String, ByVal dwDesiredAccess As Integer, _
ByVal dwShareMode As Integer, _
ByRef lpSecurityAttributes As SECURITY_ATTRIBUTES, _
ByVal dwCreationDisposition As Integer, ByVal dwFlagsAndAttributes As Integer, _
ByVal hTemplateFile As Integer) As Integer

Public Declare Function CloseHandle Lib "kernel32" Alias "CloseHandle" (ByVal hObject As Integer) As Integer
Dim retval As Integer

Public Structure SECURITY_ATTRIBUTES
Private nLength As Integer
Private lpSecurityDescriptor As Integer
Private bInheritHandle As Integer
End Structure

Public Shared Function Print()
Dim Texxxt As String
Dim SA As SECURITY_ATTRIBUTES
Dim SA
Dim outFile As FileStream, hPortP As IntPtr

LPTPORT = "LPT1"
Texxxt = "testing"
hPort = CreateFile(LPTPORT, GENERIC_WRITE, FILE_SHARE_WRITE, SA, OPEN_EXISTING, 0, 0)

hPortP = New IntPtr(hPort) convert Integer to IntPtr
outFile = New FileStream(hPortP, FileAccess.Write, False) Create FileStream using Handle

Dim fileWriter As New StreamWriter(outFile)
MessageBox.Show(RichTextBox1.Text)
fileWriter.AutoFlush = False
fileWriter.WriteLine("Testing")
fileWriter.WriteLine("Hello World2")
fileWriter.WriteLine("Hello World1")
fileWriter.WriteLine("Hello World2")
fileWriter.Write(Chr(12)) 12
fileWriter.Flush()
fileWriter.Close()
outFile.Close()

retval = CloseHandle(hPort)

End Function

End Class

*******end code*******

This also came from a help... :)

Using LPT1 or any other local printers work but when I change the value for LPTPORT with a network printer, "//dbpweb03/Prodigy Label Printer" which is the barcode printer, the CreateFile() function returns -1.

to give you an idea of what I really need, below are foxpro codes, which does print records directly to a barcode printer. It also sends escape characters to automatically configures the barcode printer at runtime:

? CHR(2) + "L" + CHR(13) &&: ENABLE PRINT MODE
? "H15" + CHR(13) && : SET BURN TIME (HIGHER = DARKER)
? "PC" + CHR(13) && : SET PRINT SPEED TO 2.0 IPS
? "SC" + CHR(13) && : SET SLEW RATE TO 2.0 IPS
? "O0000"+CHR(13) && : SPITS OUT THE LABEL IN BATCH
MODE

prints one by one a record
? CHR(2) + "L" + CHR(13) &&: ENABLE PRINT MODE
? "H15" + CHR(13) && : SET BURN TIME (HIGHER = DARKER)
? "PC" + CHR(13) && : SET PRINT SPEED TO 2.0 IPS
? "SC" + CHR(13) && : SET SLEW RATE TO 2.0 IPS
? "O0000"+CHR(13) && : SPITS OUT THE LABEL IN BATCH
MODE

I hope you could help me on this. This is actually my first time to use VB.NET so any tips will be of great help.

Hope to hear from you soon. Thanks in advance :)...

Susana
 
Back
Top