Принтер не работает, получая команды esc/p

Я пытаюсь начать работу с командами ESC/P с принтером этикеток Brother TD-4000. Я протестировал надлежащее программное обеспечение принтера, 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();
        }
    }
}

Заранее спасибо!

2 ответа

Наконец, мне пришлось изменить способ отправки кода на принтер. Вместо строки мне пришлось отправить код в байтовом массиве в шестнадцатеричном формате. Теперь принтер работает хорошо и распознает команды.

Я считаю, что ваша проблема в том, что вы включаете пробелы в строку, что недопустимо на языке 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, сначала отладив программу и просмотрев строку, отправленную на принтер в двоичной форме, и вручную проверив, нет ли лишних байтов - принтер не примет таких ошибок.

Другие вопросы по тегам