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*。