【问题标题】:Is there anyway of creating an OPOS printing queue c#无论如何创建一个OPOS打印队列c#
【发布时间】:2019-07-21 19:56:11
【问题描述】:

环境:我有 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 上用于正常打印的队列一样)?

【问题讨论】:

    标签: c# epson pos opos


    【解决方案1】:

    最好不要在单个应用程序中使用 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=FalseRelease()保持。

    【讨论】:

    • OPOS 的更好解决方案是什么?我需要个性化每张票,我的客户有不同的打印机
    猜你喜欢
    • 2021-04-05
    • 2017-04-03
    • 2013-04-08
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 2013-11-15
    • 2010-10-04
    • 1970-01-01
    相关资源
    最近更新 更多