1 Reply Latest reply on Sep 29, 2015 10:04 AM by Robin West

    Ready to Print? Zebra QLN 420 C# and Java Code?

    Miguel Enriquez

      Hi all

       

      Anyone have a piece of code for check the status of the printer?

      i want check via ip, actually the ip of the printer is: 172.16.11.207

      in C# and Java, i have this code:

       

      public String getStatus (String Printerchosen)

       

      //Printerchosen = Printer Driver Name

            {

                  try{

                  com.zebra.sdk.comm.Connection myconnection = new com.zebra.sdk.comm.DriverPrinterConnection(Printerchosen,1000,1000);

                  myconnection.open();

                  com.zebra.sdk.printer.ZebraPrinter myprinter =ZebraPrinterFactory.getInstance(myconnection);

          

                  com.zebra.sdk.printer.PrinterStatus printStatus = myprinter.getCurrentStatus();

                  myconnection.close();

                  if (printStatus.isReadyToPrint)

                  {

                        return"READY TO PRINT";

                  }

                  else

                  {   

                        return"Not Ready!!";

                  }

                

                

                  }

                  catch (Exception f)

                  {

                        f.printStackTrace();

                

                        return"Problem found";

                  }


      But isnt for a ip printer.


      Thanks

                

       

          

            }


        • Re: Ready to Print? Zebra QLN 420 C# and Java Code?
          Robin West

          Hi Miguel,

          Try this code for a TCP connection to get the status of a printer.  It's not pretty, but it will work for nearly any Zebra ZPL printer with an IP address.  This will return a list of strings with the status of the printer. The printer is possible of giving multiple status conditions at the same time.  The same process should work for Java as well.

           

              public static class GetStatus

              {

                  public static List<string> Run(IPAddress ipAddr)

                  {

                      // create tcp client and connect server on port 9100

                      TcpClient client = new TcpClient();

                      List<string> statuses = new List<string>();

           

                      try

                      {

                          client.Connect(ipAddr, 9100);

                      }

                      catch (SocketException se)

                      {

                          statuses.Add("Unable to connect to printer");

                          statuses.Add(se.Message);

           

           

                          return statuses;

                      }

           

           

                      // create tcp stream

                      NetworkStream stream = client.GetStream();

                      byte[] buffer = new byte[client.ReceiveBufferSize];

                      StreamWriter sw = new StreamWriter(stream);

           

           

                      // send Host Status Return request

                      sw.Write("~HQES");

                      sw.Flush();

           

           

                      // wait for response

                      int i = 0;

                      while (stream.DataAvailable == false)

                      {

                          Thread.Sleep(10);

                          i++;

                          if (i == 3000)

                          {  //timeout after 3 sec

                              statuses.Add("Timeout while Connecting to printer");

                              return statuses;

                          }

                      }

           

           

                      // read response, Sometimes it may not pull in the entire

                      //    response, so keep trying till you get everything ~144 bytes

                      StreamReader sr = new StreamReader(stream);

                      int length = 0;

                      while ((stream.DataAvailable) || (length < 140))

                      {

                          length += stream.Read(buffer, length, (buffer.Length - length));

                      }

           

           

                      // close connection

                      sr.Close();

                      sw.Close();

                      client.Close();

           

           

                      // parse results

                      string results = (Encoding.UTF8.GetString(buffer, 0, length));

                      ParseStatus.GetAll(results, out statuses);

                      return statuses;

                  }

              }

           

              public static class ParseStatus

              {

                  public static bool GetAll(string message, out List<string> status)

                  {

           

                      // initially, no errors

                      status = new List<string>();

                      bool ok = false;

           

                      try

                      {

                          // get the flags for different status conditions

                          int is_error = Convert.ToInt32(message.Substring(70, 1));

                          int media = Convert.ToInt32(message.Substring(88, 1));

                          int head = Convert.ToInt32(message.Substring(87, 1));

                          int pause = Convert.ToInt32(message.Substring(84, 1));

           

           

                          // check each flag that prevents printing

                          if (is_error == 0)

                          {

                              ok = true;

                              status.Add("Ready to Print");

                          }

                          if (media == 1)

                              status.Add("Error: Paper out");

                          if (media == 2)

                              status.Add("Error: Ribbon Out");

                          if (media == 4)

                              status.Add("Error: Media Door Open");

                          if (media == 8)

                              status.Add("Error: Cutter Fault");

                          if (head == 1)

                              status.Add("Error: Printhead Overheating");

                          if (head == 2)

                              status.Add("Error: Motor Overheating");

                          if (head == 4)

                              status.Add("Error: Printheat Fault");

                          if (head == 8)

                              status.Add("Error: Incorrect Printhead");

                          if (pause == 1)

                              status.Add("Printer Paused");

                          if ((!ok) && (status.Count == 0))

                              status.Add("Error: Unknown Error");

                      }

                      catch (FormatException)

                      {

                          status.Add("Unexpected response from printer, unable to get status");

                          status.Add(message);

                      }

                      return ok;

                  }

              }