无论如何创建OPOS打印队列C#

时间:2019-02-28 00:25:20

标签: c# epson pos opos

环境:我有2台通过网络连接的epson打印机。该打印机使用OPOS使用c#的POS从5台PC打印所有收据票。

问题:大多数情况下,打印机无法打印票证,因为它们已被某些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 :(得分:0)

最好不要使用单个应用程序中的OPOS,而要查看和更改应用程序的结构。

  1. 只有一台PC可以管理两台票证打印机上的打印。
  2. 创建一个在管理PC上执行打印服务的应用程序。
  3. 打印服务应用程序定义并实现必要的功能,例如接受打印请求,通知等待/执行/错误状态,取消打印,通知打印机自身状态以及通知POS应用程序。
  4. POS应用程序使用这些接口向执行打印服务并接收通知/结果的应用程序发出打印请求。

此外:
以下内容回答了有关在一台装有JavaPOS的计算机上使用一台POSPrinter的问题,但是它也可以应用于类似您的问题的情况。
如果仅处理OPOS使用情况,请考虑这一点。


这取决于应用程序的软件结构。

如果使用打印机的应用程序只有一个进程,请在应用程序启动时执行一次Open()Claim()DeviceEnabled=True。您可以在应用程序终止之前执行DeviceEnabled=FalseRelease()Close()

如有必要,该应用程序将TransactionPrint()RotatePrint()PrintNormal()等组合起来进行打印。

这缩短了打印时间。

如果使用打印机的应用程序同时在多个进程中同时运行,则每个进程中仅Open()

如果需要打印的过程几乎保持不变,则Claim()DeviceEnabled=True在获得打印机的控制权的同时要同时进行作业和屏幕的切换,释放打印机的控制权使用DeviceEnabled=False调用Release()

当需要打印的过程频繁变化时,Claim()DeviceEnabled=True在每次使用打印机后执行,并且在打印完成后,在必要的打印完成时,DeviceEnabled=False,{ {1}}保持住。