Как отменить задание печати с использованием PJL и Java после его переноса через netwok?

#java #sockets #network-printers #pcl #pjl

Вопрос:

У меня проблема с отменой заданий на печать, когда я могу успешно распечатать результат после выполнения метода печати с использованием java, подобного этому

     public static void print(byte[] bytes, String jobName, String printerIpAdd, Integer printerPort, String trayNumber) {

        System.out.println("port "   printerPort);
        try (Socket socket = new Socket(printerIpAdd, printerPort)) {
            DataOutputStream out = new DataOutputStream(socket.getOutputStream());
            System.out.println("bytes[] = "   bytes.length);
            out.write(27); //esc
            out.write("%-12345X@PJLn".getBytes());
            out.write(("@PJL SET JOBNAME="   jobName   "n").getBytes());
            out.write(("@PJL SET LPAPERSOURCE=TRAY"   trayNumber   "n").getBytes());
            out.writeBytes("@PJL SET PALETTESOURCE = DEVICEn");
            out.write(("@PJL SET PAPER=A5n").getBytes());
            out.write(("@PJL SET COPIES=1"n").getBytes());
            out.write("@PJL ENTER LANGUAGE=PDFn".getBytes());
            out.write(bytes); //data
            out.write(27); //esc
            out.write("%-12345X@PJLn".getBytes());
            out.flush();
            out.close();
        } catch (IOException ex) {
            LOGGER.error(ex);
        }
    }
 

проблема возникает, когда в принтере нет бумаги или открыта крышка или лоток удален
, задание на печать отложено, поэтому мне нужно отменить предыдущий заказ на принтер.
поэтому я пытаюсь использовать этот код, но не работаю со мной, и создать другое задание для печати вместо отмены

 public static void cancelPrintJob(String jobName, String printerIpAdd, Integer printerPort) {
        System.out.println("port "   printerPort);
        try (Socket socket = new Socket(printerIpAdd, printerPort)) {
            DataOutputStream out = new DataOutputStream(socket.getOutputStream());

            /*
            <ESC>%-12345X@PJL <CR><LF>
            @PJL DEFAULT JOBID =ON <CR><LF>
            @PJL USTATUS JOB = ON <CR><LF>
            @PJL JOB <CR><LF>
                <ESC>%-12345X@PJL <CR><LF>
                @PJL ENTER LANGUAGE = PCL <CR><LF>
                <ESC>E...PCLJob.!!!JobCancel !
            @PJL EOJ <CR><LF>
            <ESC>%-12345X

             */
            out.write(27); //esc
            out.write("%-12345X@PJLrn".getBytes());
            out.write(("DEFAULT JOBID =ONrn").getBytes());
            out.write(("@PJL USTATUS JOB = ONrn").getBytes());
            out.write(("@PJL JOBrn").getBytes());
            out.write(27); //esc
            out.write("%-12345X@PJL\rn".getBytes());
            out.write("@PJL ENTER LANGUAGE = PCLrn".getBytes());
            out.write(27); //esc
            out.write(("@PJL EOJ NAME ="   jobName   "rn").getBytes());
            out.write(27); //esc
            out.write("%-12345X@PJLn".getBytes());
            out.flush();
            out.close();
        } catch (IOException ex) {
            LOGGER.error(ex);
        }
    }