Драйвер очереди печати Windows - неверный запрос состояния - PullRequest
0 голосов
/ 19 сентября 2019

В моем приложении 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);
...