We use the following to print:
// Zebra KR403 Receipt Printer
var enumDevices = Zebra.Printing.UsbPrinterConnector.EnumDevices();
if (enumDevices.Keys.Count > 0)
{
string key = enumDevices.Keys[0];
Zebra.Printing.UsbPrinterConnector connector = new Zebra.Printing.UsbPrinterConnector(key);
string command1 = @"^XA^PW464~SD15" +
@"^FO05,100^A0N,32,32^FB450,1,0,C^FDTest Line^FS ";
command1 = command1 +
@"^CN1
^PN0
^XZ";
byte[] buffer1 = ASCIIEncoding.ASCII.GetBytes(command1);
connector.IsConnected = true;
connector.Send(buffer1);
// Read paper status
string spaperout = "^XA~HQES^XZ\n";
byte[] buffer2 = new byte[];
buffer2 = ASCIIEncoding.ASCII.GetBytes(spaperout);
connector.Send(buffer2);
byte[] buffer3 = new byte[];
int bytesread = connector.Read(buffer3, 0, 512);
}
We encounter errors while trying to read the low paper status.
Jim
We are in need of a working code example in C# that uses the Zebra.Printing.UsbPrinterConnector to query the printer status f... |
3 Replies
Robin,
Have you been able to identify the correct Zebra.Printing.UsbPrinterConnector that has the SendAndWaitFor Response method?
Jim
Hi Jim,
What errors are you getting?
Also not all Zebra printers support a low paper sensor. Most will only give a paper out error. Which printer are you using?
Robin
Robin,
The printers we are using in all of our kiosks is the KR403 unit with the paper sensor option.
The errors we are getting occur in the Zebra.Printing.UsbPrinterConnector.Read function. It is telling us the buffer is not large enough. I have tried making buffer size as large as 8192 when I call this function. Is my approach even correct? I am really looking for a proper example how to read the status in C# using this.
The code from the UsbPrinterConnector.Read function is below.
public override int Read(byte[] buffer, int offset, int count)
{
// USB 1.1 ReadFile in block chunks of 64 bytes
// USB 2.0 ReadFile in block chunks of 512 bytes
uint read;
if (readBuffer == null)
readBuffer = new byte[ReadBufferSize];
AutoResetEvent sg = new AutoResetEvent(false);
NativeOverlapped ov = new NativeOverlapped();
ov.OffsetLow = 0;
ov.OffsetHigh = 0;
ov.EventHandle = sg.Handle;
if (!FileIO.ReadFile(usbHandle, readBuffer, ReadBufferSize, out read, ref ov))
{
if (Marshal.GetLastWin32Error() == FileIO.ERROR_IO_PENDING)
sg.WaitOne(ReadTimeout, false);
else
throw new Win32Exception(Marshal.GetLastWin32Error());
}
FileIO.GetOverlappedResult(usbHandle, ref ov, out read, true);
Array.Copy(readBuffer, 0, buffer, offset, read);
return (int)read;
}