Questions? Search our site or call us at 1-800-722-6004

Printing Barcodes from Active Server Pages

Client Side Printing

You may wish to offer a Print Bar Code option on your ASP Page. The following JavaScript function can be called from the 'onClick' event of a button in an HTML form:

function printIt() { 
  //function to print current page
  window.print(); 
}

Server Side Printing

There may be situations where you need to print the barcode on the server side. for Example, supose you have a form on your website that visitors fill out when ordering products. When they submit that form, you may want to send information to a printer connected to your server that prints out a shipping label complete with a barcode. The following solutions describe how to send information to a printer using ASP Code.

Using ASP and WSH to Print on Your Intranet

Jeff Sandquist
Microsoft Corporation
March 30, 1999

The following article was originally published in the MSDN Online Voices "Servin' It Up" column.

Welcome to the new and improved "Servin' It Up". As we mentioned last month, the column will now focus on Active Server Pages (ASP) technology. I'll be taking the reins from Tom Moran, who has moved over to the Web Men Talking column in MSDN Online Voices. I hope to lead you through some really cool ASP solutions. So on with the show!

The Scenario
You are developing a Web-based application for your local intranet, and you want complete control over the output that your user prints from your Web application (don't we all?). You could just allow the user to click the print button on their Web browser. You ask, "Isn't there a way I can do this from the server?" The answer is yes: print from ASP.

The Application
We'll create a recursive ASP page that will pass information from a form to the Microsoft® Windows® Scripting Host (WSH) and output the results to a printer on your local network. Recursion, which is used to have a page call itself from within itself, is an important programming technique for ASP.

Caveats
You will need ASP, Microsoft Windows Scripting Host, and a Microsoft Visual Basic® Scripting Edition (VBScript) version that supports the FileSystemObject object. Microsoft Windows NT 4.0 Option Pack installs all of these technologies. For the latest version of the Scripting Engines or to install WSH, visit the Microsoft Scripting Technologies Web site .

Let's Get on with the Application
Create an ASP file called ASPPrint.asp. When developing your pages, establish a standard for naming your variables and stick to it. I personally prefer to use Hungarian Notation. In fact, I suggest you tell twelve of your friends to use Hungarian notation also. One of our readers didn't use Hungarian notation and fell off a cliff. Another of our readers used Hungarian notation and won a million dollars!

First, we will define the values used in our page and retrieve the value of our submit button from the forms collection. Note how we use the Option Explicit statement to force explicit declaration of all variables our script.


<%@ Language=VBScript %>
<%
Option Explicit

Dim strSubmit 'Form value for the Submit Button

Dim strPrinterPath 'Form value for Network Path to Printer

Dim strUsername 'Form value for Username
Dim strPassword 'Form value for Password
Dim strMessage 'Form value for Message to Print
Dim objFS 'VBScript File System Object
Dim objWSHNet 'Windows Scripting Host Network Object
Dim objPrinter 'Printer Object to stream text to

strSubmit = Request.Form("Submit")
%>

<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
</HEAD>
<BODY>

Since this will be a recursive, or reentrant, ASP page, it first checks the value of the Submit button to decide what action needs to be performed.

<%
'
' If we have not received the results from the form we must
' display it.
'
If strSubmit = "" Then
%>

If the value of the form is empty, the HTML form is displayed. We will use this form to retrieve the network path to the printer, the user name, password, and finally, the message that we would like to print.

<FORM action="ASPPrint.asp" method=POST id=form name=form>
<TABLE WIDTH=100% ALIGN=center BORDER=0 CELLSPACING=1 CELLPADDING=1>
<TR>
<TD ALIGN=right NOWRAP>Network Path to the Printer:</TD>
<TD ALIGN=left NOWRAP><INPUT type="text" id=printerpath name=printerpath 
value="\\< Domain >\< Printer >"></TD>
</TR>
<TR>
<TD ALIGN=right NOWRAP>Login ID:</TD>
<TD ALIGN=left NOWRAP><INPUT type="text" id=username name=username 
value="<% = strUsername %>"></TD>
</TR>
<TR>
<TD ALIGN=right NOWRAP>Password:</TD>
<TD ALIGN=left NOWRAP><INPUT type="password" id=password 
name=password></TD>
</TR>
<TR>
<TD ALIGN=right NOWRAP>Message to print:</TD>
<TD ALIGN=left NOWRAP><TEXTAREA rows=2 cols=20 id=message 
name=message></TEXTAREA></TD>
</TR>
<TR>
<TD ALIGN=right NOWRAP>&nbsp;</TD>
<TD ALIGN=left NOWRAP><INPUT type="submit" value="Submit" 
id=submit name=submit></TD>
</TR>
</TABLE>
</FORM>

Note This is not secure; I've shown it merely for illustration purposes. For security reasons, you would not want to send your Windows NT user account information over the network in plain text. Ideally, you would create an account and assign it print permissions to the network printer. You could then hard code this information in your ASP page. If you really need to send the account information over the network safely, you will need to use a Secure Sockets Layer (SSL) connection.

When our form is submitted, the following code retrieves the values from our form.

<%
Else
'
' Get information from our form
'
strPrinterPath = Request.Form("printerpath")
strUsername = Request.Form("username")
strPassword = Request.Form("password")
strMessage = Request.Form("message")

We will now use the VBScript FileSystemObject object and the WSH Network object. The Network object will give us the methods we need to open a printer connection, and the FileSystemObject will allow us to stream our output to the printer. We create these objects in the following code example:

'
' Create FileSystem Object and Windows Scripting Host Network Object
'
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objWSHNet = CreateObject("WScript.Network")

The AddPrinterConnection method maps the remote printer specified by strPrinterPath to the local resource name. In this example, we use LPT1. We populate this connection with the values previously retrieved from our form collection.

Connect to Network Printer from Windows Scripting Host:

objWSHNet.AddPrinterConnection "LPT1", strPrinterPath, False, strUsername, strPassword

With the connection established, we use FileSystemObject to stream the message to the printer:

' Open Print device as a file using the File System Object
'
Set objPrinter = objFS.CreateTextFile("LPT1:", True)
'
' Send text to print device using the File System Object
'
objPrinter.Write(strMessage)

Error trapping is always a good idea. The following section will trap for errors while closing the connection to our printer object. For production code, supply this type of error handling throughout your page.

'
' Close the print device object and trap for errors
'
On Error Resume Next
objPrinter.Close
'
' If an error has occurred while closing the printer connection,
' output what went wrong.
'
If Err Then
Response.Write ("Error # " & CStr(Err.Number) & " " & Err.Description)
Err.Clear 
Else

If we've made it to the following section, the operation has been successful. We send a friendly confirmation message to the browser.

' The operation succeeded. Output a confirmation
'
Response.Write("<CENTER>")
Response.Write("<TABLE WIDTH=100% ALIGN=center BORDER=0 CELLSPACING=1 CELLPADDING=1>")
Response.Write("<TR><TD ALIGN=RIGHT><B>Message Sent:</B></TD>")
Response.Write("<TD ALIGN=LEFT>" & strMessage & "</TD></TR>")
Response.Write("<TR><TD ALIGN=RIGHT><B>Path to Network Printer:</B></TD>")
Response.Write("<TD ALIGN=LEFT>" & strPrinterPath & "</TD></TR>")
Response.Write("<TR><TD ALIGN=RIGHT><B>Login ID:</B></TD>")
Response.Write("<TD ALIGN=LEFT>" & strUsername & "</TD></TR>")
Response.Write("</TABLE>")
Response.Write("</CENTER>")
End If

Finally, we remove the printer connection and clean up our objects.

' Remove the printer connection 
'
objWSHNet.RemovePrinterConnection "LPT1:"
Set objWSHNet = Nothing
Set objFS = Nothing
Set objPrinter = Nothing
End If
%>
</BODY>
</HTML>

The power of ASP is that it is an automation interface. Through this interface, you can access Windows Scripting Host and ultimately, through its properties and methods, connect to your network printers.

For more information on the WSH - including sample code, online Help, and other downloads log on to http://msdn.microsoft.com/scripting

Write a Visual Basic Application that accepts command line arguments

Another solution would be to create a Visual Basic application that accepts command line arguments: the application itself would be little more than a form with the activeX control on it that is never displayed. You would pass it the filename to be printed and the X and Y co-ordinates for the printer. Compile it and then use the Shell command and the Windows Script Host to run it. eg:

 

Dim WshShell
Set WshShell = Server.CreateObject("WScript.Shell")
WshShell.Run("MyApp.exe 'myBCode.wmf', 35, 35") 
Set WshShell = Nothing

 


Categories: General Product Support, Macro / Code Sample, ASP (Active Server Pages), Barcode ActiveX

Last Updated: 2011.07.07

Need more help?

Don't hesitate to call or email us with your questions

Our office is open 9AM - 5PM Monday Through Friday (E.S.T.)

Technical Support: 215-496-0202

Toll-Free: 1 (800) 722-6004
Skype: taltech1 (Voice only)
Email: support@TALtech.com