我正在尝试开始使用标签打印机 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();
}
}
}
提前致谢!
最后,我不得不改变将代码发送到打印机的方式。 我必须以十六进制格式以字节数组的形式发送代码,而不是字符串。 现在打印机可以正常工作并识别命令。
我相信你的问题是你在字符串中包含空格,这在 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 中打印的问题,首先调试程序并查看以二进制形式发送到打印机的字符串,然后手动检查是否有多余的字节 - 打印机不会接受任何此类错误。
听起来您正在尝试使用 Java 向 Brother TD-4000 标签打印机发送 ESC/P 命令,但它没有按预期响应。让我们通过几个步骤来解决问题,看看可能出了什么问题。
首先,仔细检查 Brother TD-4000 是否支持 ESC/P 命令。并非所有打印机都使用相同的命令语言,有些打印机有特定的要求。如果它使用不同的语言或协议,这可以解释为什么它没有响应。
确保打印机已正确连接并被计算机识别。有时,使用错误的端口或连接类型可能会引起问题。另外,检查打印机上是否有任何特殊设置可以直接接收命令。
编码可能很棘手。您正在使用
DocFlavor.BYTE_ARRAY.AUTOSENSE
,这应该没问题,但值得确保打印机可以处理您发送的字节格式。
您提到 P-touch Editor 工作正常,这很好,因为这意味着驱动程序可能已正确安装。但是,问题可能仍然在于驱动程序如何处理 ESC/P 等原始命令。
有时,即使命令格式中的一个小错误也会导致问题。确保您发送的 ESC/P 命令正是打印机所期望的。这包括正确的转义字符和格式。
您的 Java 代码看起来基本正确,但请确保您捕获并处理所有异常。如果出现问题,这可以为您提供更多详细信息。此外,如果打印机需要特定设置,有时向打印作业添加更多属性会有所帮助。
先尝试发送一个非常简单的命令,看看是否能得到任何响应。例如,类似:
String _ESC_P_Code = "\u001B@"; // ESC @ (initialize printer)
如果这有效,您可以开始添加更复杂的命令。
如果直接 ESC/P 命令不起作用,请考虑使用 Brother 可能提供的任何 SDK 或库。这些有时可以使与打印机的通信变得更容易。
检查打印机手册以获取有关发送原始命令的任何具体说明总是一个好主意。如果您仍然遇到困难,联系 Brother 的客户支持或查看论坛是否有类似问题可能会非常有帮助。
某些打印机可以报告错误或提供日志。如果您的确实如此,它可能会提供有关问题所在的线索。
按照以下步骤,您可以系统地解决问题。这可能是一个简单的修复,也可能需要更多的挖掘,但无论哪种方式,您都会更清楚地了解正在发生的情况。如果您仍然遇到问题,请随时寻求更多帮助!