#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);
}
}