环境:我有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窗口一样)?
答案 0 :(得分:0)
最好不要使用单个应用程序中的OPOS,而要查看和更改应用程序的结构。
此外:
以下内容回答了有关在一台装有JavaPOS的计算机上使用一台POSPrinter的问题,但是它也可以应用于类似您的问题的情况。
如果仅处理OPOS使用情况,请考虑这一点。
这取决于应用程序的软件结构。
如果使用打印机的应用程序只有一个进程,请在应用程序启动时执行一次Open()
,Claim()
,DeviceEnabled=True
。您可以在应用程序终止之前执行DeviceEnabled=False
,Release()
,Close()
。
如有必要,该应用程序将TransactionPrint()
,RotatePrint()
,PrintNormal()
等组合起来进行打印。
这缩短了打印时间。
如果使用打印机的应用程序同时在多个进程中同时运行,则每个进程中仅Open()
。
如果需要打印的过程几乎保持不变,则Claim()
和DeviceEnabled=True
在获得打印机的控制权的同时要同时进行作业和屏幕的切换,释放打印机的控制权使用DeviceEnabled=False
调用Release()
。
当需要打印的过程频繁变化时,Claim()
,DeviceEnabled=True
在每次使用打印机后执行,并且在打印完成后,在必要的打印完成时,DeviceEnabled=False
,{ {1}}保持住。