Sunteți pe pagina 1din 8

ZebraPrint ActiveX Control

Copyright © 2002, Zebra Technologies Corporation. All rights reserved.


www.zebra.com

The ZebraPrint.dll is an ActiveX control providing a simple interface to the Zebra portable printers. It currently
supports 4 connection methods: serial (comm port), infrared (IrDA), TCP, and BlueTooth. Currently, BlueTooth
support is provided via a simulated serial/modem connection.

After the ZebraPrint ActiveX control is installed, it can be used from within any HTML document using Microsoft’s
JScript web scripting language. The control can also be used from within any other programming language that
supports ActiveX, such as Visual Basic or Visual C++.

Installation Instructions for Windows CE and Pocket PC

The ZebraPrint ActiveX control for Windows CE and Pocket PC may be provided in 2 forms – either as a Windows CE
/ Pocket PC CAB file OR as a self-installing Windows executable. Please follow the appropriate instructions below
depending on whether you have a .CAB installation file or a .EXE installation file:

To install the CAB file version of the control, follow these steps:

1) Copy the .CAB file to your Windows CE device


2) Using your CE or Pocket PC device’s file explorer tool, locate the CAB file and double-click on it. The
ZebraPrint.dll will automatically be installed.

To install the .EXE version of the control, follow these steps:


NOTE: This method requires that ActiveSync 3.0 or higher be installed on your PC.

1) Connect your CE or Pocket PC device to your PC using ActiveSync.


2) Double-click on the ZebraCEPrintSetup-ALL.exe file on your Windows 9x/2000/XP computer. This will launch a
Windows setup program that will unpack the ZebraPrint control and will send to your CE or Pocket PC device via
Active Sync.
3) The ZebraPrint control will then be automatically installed on your CE or Pocket PC device.

Installation Instructions for the Windows 2000 and Windows XP version

The ZebraPrint ActiveX control for Windows 2000 and Windows XP is provided as a dll. Before this dll can be used, it
must be registered. Run the following command to register the ActiveX control:

Regsvr32.exe \path\ZebraPrint.dll

Where \path\ is replaced with the actual path to where you have stored the ActiveX control. For example, if you stored
the ActiveX control in c:\ActiveX\Zebra, you would issue the command:

Regsvr.32.exe c:\ActiveX\Zebra\ZebraPrint.dll

You should then receive a message that the ActiveX control was successfully registered.

Programming Interface

Copyright © 2002, Zebra Technologies Corporation. All rights reserved.


www.zebra.com
To use the ZebraPrint control, you first declare what connection method you are using with your printer. This is done
via one of the following methods:

SerialConnection(string port, int baud);


where:
port is the serial port (e.g. “COM1:”, “COM2:”, etc.)
baud is the baud rate (e.g. 9600, 19200, 38400, 115200)
Declares you are connecting to the printer via a serial comm port or via a BlueTooth serial/modem connection.

IrDAConnection();
Declares you are connecting to the printer via the infrared (IrDA) port.

TcpConnection(string host, int port);


where:
host is the ip address or hostname of the printer
port is the TCP port number the printer is listening on
Declares you are connecting to the printer via TCP/IP.

NOTE: If you do not specify a connection type, ZebraPrint defaults to a serial connection on “COM1:” at 19200 baud.

After the connection is declared, you can use the following additional methods:

int Print(string data);


where:
data is the data to be sent to the printer

Print() will do an implicit Open() and Close() of the printer port, so it can be called immediately after
declaring the printer connection. It will also do error checking and will prompt for retry attempts (via dialog boxes)
when an error condition is encountered. Because it handles the Open() and Close() of the printer automatically and
does error handling, it is recommended that Print() be used to send data to the printer. This function returns 1 on
success and 0 if the Print() command failed. Call ZebraPrint’s GetLastError() function to get the error code.
NOTE: if you prefer this command does not do error checking or perform a status check before the print is performed,
use the EnableStatusCheck(), SetStatusQueryTimeout(), and ShowPrompts() to modify the default behavior of this
command. These commands are described below.

If you require a lower level of interaction and/or control with the printer, the following methods are also
supplied:

int Open();
Opens a connection to the printer. This function returns 1 on success and 0 if the Open() command failed. On failure,
the error code encountered can be retrieved via a call to ZebraPrint’s GetLastError() (see below).

Close();
Closes the connection to the printer.

long Send(string data);


where:
data is the null terminated string of data to be sent to the printer
Sends the data to the printer. Returns the number of bytes successfully sent. If the return value is less than the number
of bytes in data, call GetLastError() to determine the error condition. This function requires the printer connection was
previously opened via a call to Open().

string Recv(long lTimeout)


where:
lTimeout is the maximum time (in milliseconds) to block waiting for a response from the printer

Copyright © 2002, Zebra Technologies Corporation. All rights reserved.


www.zebra.com
This command will receive data from the printer. If the timeout period is exceeded, an empty string “” is returned. This
command will block a maximum of lTimeout milliseconds. If data is received before the the timeout is exceeded, the
command will return as soon as the input buffer has been exhausted for 100ms.
The maximum number of bytes returned by a single call to Recv() is 999 bytes. If 999 bytes of data is received from a
single call to Recv(), another call should be made with a timeout of 0 to check for any remaining data.

long GetPrinterStatus()
This command will query the printer for its current status and will return it as a bit field. A response of 0xFFFF0000
indicates no response from the printer. The following mask values indicate different status attributes of the printer:
LOWBATTERY_MASK 0x0008 /* printer status, low-battery bit */
HEADUP_MASK 0x0004 /* printer status, head-up bit */
PAPEROUT_MASK 0x0002 /* printer status, paper-out bit */
BUSY_MASK 0x0001 /* printer status, busy bit */

EnableStatusCheck(int iCheck)
where:
iCheck specifies whether to enable (1) or disable (0) the status checking
If status checking is enabled, the ZebraPrint ActiveX control will first verify the printer is available and in a “ready”
state before it attempts to send data to the printer via the Print() command. Disabling status checking will allow
printing of data without first querying the printer’s status.

SetStatusQueryTimeout(int iTimeout)
where:
iTimeout specifies how long (in seconds) to wait for a response from the printer
If status checking is enabled, this command will specify how long to wait until reporting an error that there is no
response from the printer. The default timeout is 10 seconds. The minimum allowed value is a timeout of 1 second.

ShowPrompts(int iPrompts)
where:
iPrompts is either a 1 or 0 to specify whether or not error messages and “retry” prompts should be
displayed.
This function can be called to alter the default behavior of the Print() command. By default, when the Print() command
encounters a printing problem, it will display a message window describing the problem and will allow the user to retry
the print command. Passing a value of 0 to this function will disable this behavior.

EnablePrintVerify(int iVerify)
where:
iVerify is a flag to specificy whether a confirmation “reprint” prompt will be displayed after each
Print()
This option is useful if you want to give the user a chance to reprint something when the printer encounters an error
while it was printing (such as running out of paper). Pass a 1 to enable this feature. By default this feature is off.

SerialCloseWait(int iWait)
where:
iWait is the time in milliseconds to wait
This command will alter the default behavior of the Print() command when used with a serial port. It specifies the
number of milliseconds to wait before closing the serial port after a Print(). This is useful if you have configured the
printer to use the PRESENT-AT command in a printer config.sys file. You should ensure the wait time chosen exceeds
the time delay specified with the PRESENT-AT command. For information on PRESENT-AT, please refer to the CPL
programmer’s guide. NOTE: This command only affects serial printing – it does not apply to IR or TCP printing.

SetFlowCtl(int iFlowMask)
where:
iFlowMask specifies the flow control settings mask
This command enables/disables serial hardware and software flow control. To choose the flow control settings, build a
mask of values where 0x01 specifies hardware flow control and 0x02 specifies software flow control. For example, to

Copyright © 2002, Zebra Technologies Corporation. All rights reserved.


www.zebra.com
enable both hardware and software flow control, you would use a mask value of 0x03 (i.e. 0x1 + 0x02). The default
mask is 0x0 (i.e. no flow control).

Version();
Displays the version number of the ZebraPrint.dll

long GetLastError();
Returns the numeric error code of the last error encountered by the ActiveX dll.

ShowLastError();
This method displays a window with the last error code encountered, along with a text description.

Usage Examples

1) Serial Printing within HTML

The following example illustrates using the ZebraPrint ActiveX control to print to a serial printer via an HTML
document:

<HTML>
<HEAD><TITLE>ZebraPrint Serial Sample</TITLE></HEAD>
<SCRIPT LANGUAGE="JScript">
var zp = new ActiveXObject("ZebraPrint.ZebraPrintCtl");
zp.SerialConnection("COM1:", 19200);
</script>
<body>
This is a test of serial printing.
<script language="JScript">
zp.Print("! 0 200 200 581 1\r\nLABEL\r\nCONTRAST 0\r\nTONE 0\r\nSPEED 3\r\nPAGE-WIDTH 240\r\nBAR-
SENSE\r\nTEXT90 4 3 36 288 $22.88\r\nTEXT90 5 2 163 273 SWEATSHIRT\r\nVBARCODE UPCA 2 1 45 139 576
04364503284\r\nTEXT90 7 0 191 511 043645032841\r\nTEXT90 5 0 4 524 COMPARE AT\r\nTEXT90 4 0 30 508 $
30.00\r\nTEXT90 5 0 115 575 ZD-180-KL\r\nTEXT90 5 2 119 269 ALL COTTON\r\nTEXT90 7 0 114 389
01/17/98\r\nTEXT90 0 0 208 173 EA00-732-00560\r\nTEXT90 5 0 82 519 ELSEWHERE\r\nBOX 189 358 217 527
1\r\nFORM\r\nPRINT\r\n");
</script>
</body>
</HTML>

2) IrDA Printing within HTML

The following example illustrates using the ZebraPrint ActiveX control to print to an IrDA printer via an HTML
document:

<HTML>
<HEAD><TITLE>ZebraPrint Infrared (IrDA) Sample</TITLE></HEAD>
<SCRIPT LANGUAGE="JScript">
var zp = new ActiveXObject("ZebraPrint.ZebraPrintCtl");
zp.IrDAConnection();
</script>
<body>
This is a test of IrDA printing.
<script language="JScript">
zp.Print("! 0 200 200 581 1\r\nLABEL\r\nCONTRAST 0\r\nTONE 0\r\nSPEED 3\r\nPAGE-WIDTH 240\r\nBAR-
SENSE\r\nTEXT90 4 3 36 288 $22.88\r\nTEXT90 5 2 163 273 SWEATSHIRT\r\nVBARCODE UPCA 2 1 45 139 576
04364503284\r\nTEXT90 7 0 191 511 043645032841\r\nTEXT90 5 0 4 524 COMPARE AT\r\nTEXT90 4 0 30 508 $
30.00\r\nTEXT90 5 0 115 575 ZD-180-KL\r\nTEXT90 5 2 119 269 ALL COTTON\r\nTEXT90 7 0 114 389
01/17/98\r\nTEXT90 0 0 208 173 EA00-732-00560\r\nTEXT90 5 0 82 519 ELSEWHERE\r\nBOX 189 358 217 527
1\r\nFORM\r\nPRINT\r\n");
</script>
</body>
</HTML>

Copyright © 2002, Zebra Technologies Corporation. All rights reserved.


www.zebra.com
3) Auto-detection / Installation of ActiveX control

Using JScript, it is possible to detect if the ZebraPrint ActiveX control is not currently installed. The following
example illustrates recognizing this condition and also illustrates the possibility of automatically installing the control
via a web URL.

<HTML>
<HEAD><TITLE>ActiveX Sample</TITLE></HEAD>
<SCRIPT LANGUAGE="JScript">
var zp = new ActiveXObject("ZebraCEPrint.ZebraCEPrintCtl");
</script>
<body>
<script language="JScript">
if (zp == null)
document.write("Failed to load the ZebraPrint activeX control. Click <a
href='http://1.2.3.4/activex/zebraprint.PPC2000_2002_ARM.CAB'>here</a> to install the ZebraPrint
ActiveX control");
else
zp.Print("! 0 200 200 581 1\r\nLABEL\r\nCONTRAST 0\r\nTONE 0\r\nSPEED 3\r\nPAGE-WIDTH
240\r\nBAR-SENSE\r\nTEXT90 4 3 36 288 $22.88\r\nTEXT90 5 2 163 273 SWEATSHIRT\r\nVBARCODE UPCA 2 1
45 139 576 04364503284\r\nTEXT90 7 0 191 511 043645032841\r\nTEXT90 5 0 4 524 COMPARE AT\r\nTEXT90 4
0 30 508 $ 30.00\r\nTEXT90 5 0 115 575 ZD-180-KL\r\nTEXT90 5 2 119 269 ALL COTTON\r\nTEXT90 7 0 114
389 01/17/98\r\nTEXT90 0 0 208 173 EA00-732-00560\r\nTEXT90 5 0 82 519 ELSEWHERE\r\nBOX 189 358 217
527 1\r\nFORM\r\nPRINT\r\n");
</script>
</body>
</HTML>

4) Using the ActiveX control within Visual Basic

The ActiveX control can be used within Visual Basic as illustrated by the code below. However, if you would like to
enable automatic syntax checking of the ZebraPrint methods within Visual Basic, you will first need to import a
reference to the ActiveX object. This can be done as follows: Open you Visual Basic project and choose “Project-
>References…” on the main menu. Click on “Browse…” and locate the ZebraPrint.tlb file that was supplied with this
document. If you are prompted with warning message, “The selected library is not marked as usable in your current
platform. Would you like this library added?”, answer “YES”. The ZebraPrint library will then be added to your list of
valid references. You can then view the ZebraPrint methods via the Object Browser.

Here is the actual VB code demonstrating the use of the ZebraPrint object:

Dim ZP As ZebraPrint.ZebraPrintCtl
Set ZP = CreateObject("ZebraPrint.ZebraPrintCtl")

Dim CRNL As String


CRNL = Chr(13) + Chr(10) ‘ Set a string equal to CR and LF

ZP.SerialConnection "COM1:", 19200


ZP.Print "! 0 200 200 581 1" + CRNL + "LABEL" + CRNL + "CONTRAST 0" + CRNL + "TONE 0" + CRNL +
"SPEED 3" + CRNL + "PAGE-WIDTH 240" + CRNL + "BAR-SENSE" + CRNL + "TEXT90 4 3 36 288 $22.88" + CRNL
+ "TEXT90 5 2 163 273 SWEATSHIRT" + CRNL + "VBARCODE UPCA 2 1 45 139 576 04364503284" + CRNL +
"TEXT90 7 0 191 511 043645032841" + CRNL + "TEXT90 5 0 4 524 COMPARE AT" + CRNL + "TEXT90 4 0 30 508
$ 30.00" + CRNL + "TEXT90 5 0 115 575 ZD-180-KL" + CRNL + "TEXT90 5 2 119 269 ALL COTTON" + CRNL +
"TEXT90 7 0 114 389 01/17/98" + CRNL + "TEXT90 0 0 208 173 EA00-732-00560" + CRNL + "TEXT90 5 0 82
519 ELSEWHERE" + CRNL + "BOX 189 358 217 527 1" + CRNL + "FORM" + CRNL + "PRINT" + CRNL

5) Using the ActiveX control from Visual C++

Within your Visual C++ project, choose “View->Class Wizard…” to open Class Wizard. Click on “Add Class…” and
choose “From a type library…”. Using the file browser, select the file ZebraPrint.tlb. You will then be prompt for the
default file names to use for this new class. Accept the defaults of ZebraPrint.cpp and ZebraPrint.h. This will create a
new class called IZebraPrintCtl within your project. This new class is derived from the class COleDispatchDriver. To
actually make use of the class, follow the example provided below:

Copyright © 2002, Zebra Technologies Corporation. All rights reserved.


www.zebra.com
IZebraPrintCtl zp;

if (zp.CreateDispatch(_T("ZebraPrint.ZebraPrintCtl")))
{
zp.Version();
zp.SerialConnection(_T("COM1:"), 19200);
zp.Print(_T("! 0 200 200 581 1\r\nLABEL\r\nCONTRAST 0\r\nTONE 0\r\nSPEED 3\r\nPAGE-WIDTH
240\r\nBAR-SENSE\r\nTEXT90 4 3 36 288 $22.88\r\nTEXT90 5 2 163 273 SWEATSHIRT\r\nVBARCODE UPCA 2 1
45 139 576 04364503284\r\nTEXT90 7 0 191 511 043645032841\r\nTEXT90 5 0 4 524 COMPARE AT\r\nTEXT90 4
0 30 508 $ 30.00\r\nTEXT90 5 0 115 575 ZD-180-KL\r\nTEXT90 5 2 119 269 ALL COTTON\r\nTEXT90 7 0 114
389 01/17/98\r\nTEXT90 0 0 208 173 EA00-732-00560\r\nTEXT90 5 0 82 519 ELSEWHERE\r\nBOX 189 358 217
527 1\r\nFORM\r\nPRINT\r\n"));
}

6) Using the Send() / Recv() commands to query various printer attributes

Using the Send() / Recv() commands, it is possible to using the printer’s “GETVAR” utility command to query various
attributes, such as battery voltage. Here is an example of doing this within JScript:

<SCRIPT LANGUAGE="JScript">
var zp = new ActiveXObject("ZebraPrint.ZebraPrintCtl");
zp.SerialConnection("COM8:", 19200);
zp.Open();
zp.Send("! U1 GETVAR \"power.voltage\"\r\n");
response = zp.Recv(1000); // wait up to 1 second (1000ms) for a response
if (response == "")
alert("Failed to receive a response.");
else
alert(response);
zp.Close();
</SCRIPT>

7) Using the Magnetic Card Reader (MCR)

The ActiveX control can also be used to retrieve data from Zebra printers that are equipped with a Magnetic Card
Reader. This involves first sending the appropriate MCR command to the printer and then using the ActiveX control’s
Recv() function to retrieve the MCR data. For specifics on the MCR command syntax, please refer to the Zebra printer
programming manual.

The following examples illustrate retrieving data from the MCR using JScript, Visual Basic, and Visual C++:

Jscript

<HTML>
<HEAD><TITLE>ActiveX Sample</TITLE></HEAD>
<SCRIPT LANGUAGE="JScript">
var zp = new ActiveXObject("ZebraPrint.ZebraPrintCtl");
zp.SerialConnection();
</script>
<body>
This is a test
<script language="JScript">
if (zp == null)
document.write("Failed to load ZebraPrint activeX control. Please re-
install the ZebraPrint ActiveX control");
else
{
var mcr_data;
zp.Version();
zp.Open();

Copyright © 2002, Zebra Technologies Corporation. All rights reserved.


www.zebra.com
zp.GetPrinterStatus(); // wait for the printer to be ready

alert("Scan a card after clicking ok and you see the amber LED begin to
flash on the printer...");

zp.Send("! U1 MCR 80 T1 T2 ERRORS\r\n");


mcr_data = zp.Recv(10000);
zp.Close();

// Display the MCR data received


alert(mcr_data);
}
</script>
</body>
</HTML>

Visual Basic

Private Sub Form_OKClick()


Dim CRNL As String
CRNL = Chr(13) + Chr(10)
Dim ZP As ZebraPrint.ZebraPrintCtl
Set ZP = CreateObject("ZebraPrint.ZebraPrintCtl")
ZP.Version
ZP.SerialConnection "COM1:", 19200

ZP.Open
ZP.GetPrinterStatus
MsgBox "Please scan a magnetic card after clicking OK and you see the
printer's amber light begin to blink."
ZP.Send "! U1 MCR 80 T1 T2 ERRORS" + CRNL

Dim mcr_data As String

mcr_data = ZP.Recv(10000)
ZP.Close

MsgBox mcr_data
End Sub

Visual C++

IZebraPrintCtl zp;

if (zp.CreateDispatch(_T("ZebraPrint.ZebraPrintCtl"))){
zp.Version();
zp.SerialConnection(_T("COM1:"), 19200);
if (zp.Open()){
if (zp.GetPrinterStatus() == 0xffff0000)
MessageBox(_T("Failed to connect to the printer."));
else {

CString szMCRData;
zp.Send(_T("! U1 MCR 80 T1 T2 ERRORS\r\n"));

Copyright © 2002, Zebra Technologies Corporation. All rights reserved.


www.zebra.com
szMCRData = zp.Recv(10000);

MessageBox(szMCRData);
}
}
}

Version History
2.1 6-2-2003
Added support for a baud rate of 115200 when using serial communications.
2.0 6-2-2003
Corrected buffer copying in Recv() function so allow data to be received on non-unicode platforms.

1.8, 8-13-2002
Added SetFlowCtl to enable/disable serial port flow control.

1.7, 7-31-2002
Added examples illustrating using the MCR.
Corrected a buffer overflow problem if more than 99 bytes were received via a call to Recv()

1.6, 4-22-2002
Added Recv() command to get data back from printer.

1.5, 4-19-2002
Modified the serial i/o behavior to support a BlueTooth serial/modem connection in additional to regular serial
(comm) printing.

1.4, 4-16-2002
Added SerialCloseWait() command to improve interaction with PRESENT-AT.

1.3, 4-1-2002
Added EnablePrintVerify() command to turn on automatic prompting of the user for reprints when the
Print() command is used.

1.2, 3-29-2002
Altered the default behavior of the Print() command so it now waits 10 seconds for the printer to become
available, rather than 5 seconds.
Added SetStatusQueryTimeout() command for altering the default timeout when waiting for the printer to
become available.

1.1, 3-25-2002
Initial full release. Added TCP support and extra commands to allow modification of the default behavior of
the Print() command.

1.0D beta, 3-20-2002


Initial test release. Supports serial and IrDA.

Copyright © 2002, Zebra Technologies Corporation. All rights reserved.


www.zebra.com

S-ar putea să vă placă și