Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的Linux打印_Linux_Printing_Java - Fatal编程技术网

java中的Linux打印

java中的Linux打印,linux,printing,java,Linux,Printing,Java,我使用的是热敏打印机,它在打印前或打印后会将抽屉踢出。但我想阻止这种情况,我会在需要时发送一个十六进制代码来取消抽签。我使用的序列是openDrawerCommand=“\u001B\u0070\u0030\u0042\u0045”这在windows中运行正常,但如果在linux上运行,我会收到一些错误,不是在应用程序中,而是来自打印机驱动程序,它说“处理文档“Java打印”时出现问题”。这是怎么回事?我认为这与代码有关,所以它在所有平台上都运行良好。我使用的代码如下所示: public Ope

我使用的是热敏打印机,它在打印前或打印后会将抽屉踢出。但我想阻止这种情况,我会在需要时发送一个十六进制代码来取消抽签。我使用的序列是
openDrawerCommand=“\u001B\u0070\u0030\u0042\u0045”这在windows中运行正常,但如果在linux上运行,我会收到一些错误,不是在应用程序中,而是来自打印机驱动程序,它说“处理文档“Java打印”时出现问题”。这是怎么回事?我认为这与代码有关,所以它在所有平台上都运行良好。我使用的代码如下所示:

public OpenCashDrawer() {
    PrintService pservice = PrintServiceLookup.lookupDefaultPrintService();
    System.out.println("printservice"+pservice);
    try {
        DocPrintJob job = pservice.createPrintJob();
        String openDrawerCommand = ((char)0x1B70111)+"";
        //
        openDrawerCommand = "\u001B\u0070\u0030\u0042\u0045";
        byte by[] = openDrawerCommand.getBytes();
        //char[] printdata = "hello world\n".toCharArray();
        // System.out.println(by[1]);
        DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
        //PrintService pservice = PrintServiceLookup.lookupDefaultPrintService();
        //DocPrintJob pjob = pservice.createPrintJob();
        //DocFlavor flavor = DocFlavor.CHAR_ARRAY.TEXT_PLAIN;
        Doc doc = new SimpleDoc(by, flavor, null);
        job.print(doc, null);
    } catch (Exception e) {
        System.out.println("Whoa bro. The printer is balls. Check it:");
        e.printStackTrace();
    }
}

我通过以下代码实现了这一点

public OpenCashDrawer() {
    SwingWorker worker = new SwingWorker<String, Void>() {

        public String doInBackground() {
            try {
                String sql = "INSERT INTO pos_cashdraw SET user_id='"+global_variables.user_id+"', message='Opened For Sale'";
                mysql_query.update_mysql(variables.con.conn, sql);
                String out = "";
                do {
                    out = "";
                    //System.out.println("opened cashdraw");
                    //String openDrawerCommand = "\u001B\u0070\u0030\u0042\u0045";
                    String openDrawerCommand2 = "\u0017";
                    //String cmd = "echo -e " + openDrawerCommand2 + " > /dev/usblp0";
                    String cmd = "echo -e " + openDrawerCommand2 + " > /dev/ttyS0";
                    ProcessBuilder pb = new ProcessBuilder("bash", "-c", cmd);

                    pb.redirectErrorStream(true);
                    if (pb != null) {
                        Process shell = pb.start();
                        InputStream shellin = shell.getInputStream();
                        int c;
                        while ((c = shellin.read()) != -1) {
                            System.out.write(c);
                            out += (char) c;
                        }
                        shellin.close();
                    }
                } while (out.contains("busy"));
            } catch (IOException ex) {
                System.err.println("Not supported in your operating system");
            }
            return "Opened";
        }
    };
    worker.execute();
}
publicOpenCashDrawer(){
SwingWorker worker=新SwingWorker(){
公共字符串doInBackground(){
试一试{
字符串sql=“插入pos_现金提取集用户_id=”+全局变量。用户_id+”,消息=“已开放销售”;
mysql\u query.update\u mysql(variables.con.conn,sql);
串出“”;
做{
out=“”;
//系统输出打印项次(“开放式现金提取”);
//字符串openDrawerCommand=“\u001B\u0070\u0030\u0042\u0045”;
字符串openDrawerCommand2=“\u0017”;
//String cmd=“echo-e”+openDrawerCommand2+“>/dev/usblp0”;
String cmd=“echo-e”+openDrawerCommand2+“>/dev/ttyS0”;
ProcessBuilder pb=新的ProcessBuilder(“bash”、“-c”、cmd);
pb.重定向错误流(真);
如果(pb!=null){
进程shell=pb.start();
InputStream shellin=shell.getInputStream();
INTC;
而((c=shellin.read())!=-1){
系统输出写入(c);
out+=(char)c;
}
shellin.close();
}
}while(out.contains(“busy”));
}捕获(IOEX异常){
System.err.println(“您的操作系统不支持”);
}
返回“已打开”;
}
};
worker.execute();
}

您是否在原始模式下设置了CUPS队列?“此文档与Adobe文档不一致。。。这可能意味着队列需要PS或PDF,并且您正在发送一些原始数据。CUPS在http://localhost:631上有一个web界面。也许你需要深入了解CUPS设置。也许你可以通过在/dev/lp1上打开一个FileOutputStream直接写入打印机?如果它是串行的(甚至通过USB适配器),那么你的系统中就有一些/dev/tty*。