我正在尝试使用标签打印机Brother TD-4000开始使用ESC / P命令。 我已经测试了打印机的正确软件,P-touch Editor 5.1,我可以制作几个标签,打印机运行良好但是,当我尝试用Java代码制作自己的标签时,打印机不能正常工作所有,它没有回应。 我已经与其他标签打印机一起使用EZPL,我对这种方法没有任何问题。 我现在可以尝试什么?
我的代码很简单,你在这里:
public class PrintESC_P {
public static void main(String[] args) {
PrintService printService = null;
String printerName = "Brother TD-4000";
HashAttributeSet attributeSet = new HashAttributeSet();
attributeSet.add(new PrinterName(printerName, null));
PrintService[] services = PrintServiceLookup.lookupPrintServices(null, attributeSet);
if (services.length == 0) {
throw new IllegalArgumentException("Printer not found.");
} else if (services.length > 1) {
System.out.println("Found more than one printer. Only the first printer will be used.");
}
printService = services[0];
System.out.println("Printer found: "+printService.getName());
try {
DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
String _ESC_P_Code = "ESC i a 00h\r\n" +
"ESC @\r\n" +
"ESC i L 01h\r\n" +
"ESC ( C 02h 00h FCh 02h\r\n" +
"ESC $ 2Bh 00h\r\n" +
"ESC ( V 02h 00h 6Dh 01h\r\n" +
"ESC k 0bh\r\n" +
"ESC X 00h 64h 00h\r\n" +
"PRINTER TEST\r\n" +
"ESC i C\r\n" +
"FF\r\n";
SimpleDoc doc = new SimpleDoc(_ESC_P_Code.getBytes(), flavor, null);
DocPrintJob job = printService.createPrintJob();
job.print(doc, null);
} catch (Exception e) {
e.printStackTrace();
}
}
}
提前致谢!
答案 0 :(得分:2)
最后,我不得不改变将代码发送到打印机的方式。 我不得不以十六进制格式发送字节数组中的代码而不是字符串。 现在打印机运行良好并识别命令。
答案 1 :(得分:1)
我相信你的问题是你在字符串中包含空格,这在ESC / P语言中是不允许的。
而不是(不正确)字符串:
String _ESC_P_Code = "ESC i a 00h\r\n"
你必须写:
String _ESC_P_Code = "\x1Bia\x00" // that is 4 bytes: 0x1B, 0x69, 0x61, 0x00
您不必按照我编写字符串的方式,只需确保您发送原始数据。
我通过首先调试程序并查看以二进制形式发送到打印机的字符串,并手动检查是否没有额外的字节来解决我在ESC / P中打印的问题 - 打印机不会接受任何此类错误。