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

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

          

 

    

      }


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;

        }

    }

Vote: 
Vote up!
Vote down!

Points: 0

You voted ‘up’


How can we perform the same operation for the USB printers ? We are connecting zebra ZPL printers through USB using c# code base.

Vote: 
Vote up!
Vote down!

Points: 0

You voted ‘up’


...

Vote: 
Vote up!
Vote down!

Points: 0

You voted ‘up’