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();
}
|
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> </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
|
Use a 3rd party Custom Server Component
The link below should take you to a company that sells a
compnent for server side printing.
http://www.sunlink.net/~rrobbins/aspPrint.htm
Related Links
Introduction to Active Server
Pages
Using TAL Bar Code ActiveX Plus
with PERL CGI Scripts
See the fully working ASP example of the TAL Bar Code
ActiveX in action at www.freebarcodes.com! |