В моем приложении WinForms c # широко используются принтеры этикеток Zebra, и мы используем режим печати EPL и ZPL.После большого тестирования мы обнаружили, что когда диспетчер очереди печати Windows отправляет команды на принтер, он сразу же отправляет команду состояния на тот же принтер после печати.Он каким-то образом знает, что это за команда состояния, либо от драйверов, либо от самого принтера, то есть «^HS
».
Проблема в том, что когда мы переключаем принтер в режим EPL, команда состояния отправляется, но она имеет формат ZPL, и от принтера не приходит ответ.Это отсутствие ответа вызывает значительную задержку диспетчера очереди печати Windows, в то время как он ожидает ожидания ответа.
Я использую стандартный код в ссылке ниже для печати.
https://github.com/andyyou/SendToPrinter/blob/master/Printer/RawPrinterHelper.cs
Когда мы используем SDK прямого подключения Zebra, мы можем говорить напрямую с принтером, игнорируя диспетчер очереди печати Windows, и такая команда состояния не отправляется.Это поведение, которое мы хотим, но Zebra SDK не подходит для наших целей.
Кто-нибудь знает, как мы можем изменить это поведение диспетчера очереди Windows?
Пример кода, используя RawPrinterHelper вссылка выше:
//Standard Zebra SGD to set ZPL language
string SetZPL = "! U1 setvar \"device.languages\" \"zpl\"\n";
//Standard Zebra SGD to set EPL language
string SetEPL = "! U1 setvar \"device.languages\" \"epl\"\n";
//Push to ensure printer is in ZPL mode
RawPrinterHelper.SendStringToPrinter(printerName, SetZPL);
//Set printer into EPL mode - This is where the delay occurs
RawPrinterHelper.SendStringToPrinter(printerName, SetEPL);