Есть ли в любом случае создание очереди печати OPOS c # - PullRequest
0 голосов
/ 28 февраля 2019

Среда: у меня есть 2 принтера epson, подключенных через сеть.Эти принтеры печатают все квитанции квитанций от 5 компьютеров с POS в c #, используя OPOS.

Проблема: в большинстве случаев принтеры не могут распечатать билеты, потому что они заблокированы некоторыми POS.В других случаях печать занимает слишком много времени.

Код печати:

p.printerOPOS.Open();
p.printerOPOS.Claim(PRINT_WAIT_SECONDS); //5 seconds
p.printerOPOS.DeviceEnabled = true;
p.printerOPOS.PrintNormal(PrinterStation.Receipt, builder);
p.printerOPOS.DeviceEnabled = false;
p.printerOPOS.Close();

Вопрос. Как обеспечить печать?Есть ли способ создать очередь OPOS (как в Windows для обычной печати)?

1 Ответ

0 голосов
/ 28 февраля 2019

Лучше не использовать OPOS из отдельных приложений, а просматривать и изменять структуру приложения.

  1. Только один ПК управляет печатью на двух принтерах билетов.
  2. Создайте приложение, которое выполняет службу печати, на ПК управления.
  3. Приложение службы печати определяет и реализует необходимые функции, такие как принятие запроса на печать, уведомление о состоянии ожидания / выполнения / ошибки, отмена печати, уведомление о собственном принтере.состояние и уведомление для приложения POS.
  4. Приложение POS использует эти интерфейсы для отправки запроса на печать приложению, которое выполняет службу печати и получает уведомление / результат.

Кроме того:
Следующие ответили на вопрос об использовании одного POSPrinter на одном компьютере с JavaPOS, но его также можно применить к ситуациям, подобным вашему вопросу.
Если вы имеете дело только с использованием OPOSпожалуйста, учтите это.


Это зависит от структуры программного обеспечения приложения.

Если приложение, использующее принтер, имеет только один процесс, выполните Open(), Claim(), DeviceEnabled=True один раз при запуске приложения.Вы можете выполнить DeviceEnabled=False, Release(), Close() непосредственно перед завершением приложения.

При необходимости приложение объединяет TransactionPrint(), RotatePrint(), PrintNormal() и т. Д. Для печати. ​​

Это сокращает время, необходимое для печати. ​​

Если приложения, использующие принтеры, работают одновременно в более чем одном процессе одновременно, только Open() в каждом процессе.

Если процесс, требующий печати, остается практически неизменным, Claim() и DeviceEnabled=True на стороне получения права управления принтером одновременно с моментом переключения задания и экрана, на стороне для освобождения права управления навызывается принтер с DeviceEnabled=False, Release().

Когда процессы, требующие частой смены печати, Claim(), DeviceEnabled=True выполняется после каждого использования принтера и после завершения печати, когда это необходимопечать завершена, DeviceEnabled=False, Release() для удержания.

...