1

环境:我有2台爱普生打印机通过网络连接。这台打印机使用 OPOS 打印来自 5 台 PC 的所有收据票,并带有 c# 中的 POS。

问题:大多数时候打印机无法打印票,因为它们被某些 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 上的正常打印队列一样)?

4

1 回答 1

1

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

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

另外:
以下回答了关于在一台带有JavaPOS的计算机上使用一台POSPrinter的问题,但它也可以应用于像您的问题这样的情况。
如果您只处理 OPOS 使用,请考虑这一点。


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

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

如有必要,应用程序会结合TransactionPrint()RotatePrint()PrintNormal()等进行打印。

这缩短了打印所需的时间。

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

如果需要打印的过程几乎保持不变,Claim()并且在获得打印机控制权的一侧与切换作业和画面的时机同时,则调用DeviceEnabled=True释放打印机控制权的一侧。DeviceEnabled=FalseRelease()

当需要打印的过程频繁更改时Claim()DeviceEnabled=True在每次使用打印机后执行,打印完成后,当需要打印完成时DeviceEnabled=FalseRelease()保持。

于 2019-02-28T01:21:54.040 回答