【问题标题】:printing from a webserver to a thermal printer with no intermediary从网络服务器打印到热敏打印机,无需中介
【发布时间】:2013-03-05 23:42:04
【问题描述】:

我已经研究这个问题将近一个月了。似乎我正被推向各个不同的方向。希望有人能帮我解答。

给出我正在寻找的简要模型:

我有一个网络服务器,其中包含我需要通过互联网到达热敏打印机进行打印的信息。我不希望计算机成为中介。进行必要的编程以实现这一点我没有问题。我的问题来自于找到我能够编程的设备。我遇到的第一个问题是找到一台热敏收据打印机,它有一个内置的网络服务器,我可以通过编程来轮询我的服务器以获取要打印的信息。目前没有可用于此目的的打印机。我已经与 Zebra、Epson、Brother 等进行了交谈。如果两个设备都在同一个网络上,例如手机打印机到手机连接到的同一网络上的打印机,大多数都有打印解决方案,并且大多数都有 SDK做。我需要打印机能够轮询我的网络服务器。所以我去找了一个替代品。也许我可以将无线 USB 迷你网络服务器连接到打印机以达到我的最终目标。我认为这将是一项简单的任务,但事实并非如此。我对 stackoverflow.com 用户的问题是,有没有人遇到过类似的问题并知道解决方案?我再次与不同的制造商交谈过,但他们都无法提供帮助。我想他们中的大多数人甚至无法理解我在说什么。我希望那些在这里编程的人能理解我的问题。

下面是我正在尝试做的一个本土的环形交叉路口解决方案。

http://proto-pic.co.uk/internet-connected-thermal-printer-kit/

上面的这个解决方案再次要求我从头开始构建它。 berg cloud 是另一种选择,但它们不允许我控制我的网络服务器,一切都通过它们运行。请随时提出问题,因为我不希望快速回答​​这个问题。我希望有遇到类似问题的程序员。

为了引用我为这个问题选择的标签,我在想也许我可以将一个设备(Web 服务器微控制器设置)连接到热敏打印机,它可能有一个运行 Web 服务器的 JVM,然后我可以通过 USB 进行通信到打印机。我知道对于微控制器来说,Java 比 C 差得多,但它是我所知道的。很想听听任何替代解决方案。

【问题讨论】:

    标签: java zebra-printers zpl zpl-ii


    【解决方案1】:

    我强烈建议您此时重新考虑 Zebra websocket 解决方案。

    最好的解决方案仍然可能是迷你 Web 服务器解决方案。

    我对 Zebra websocket 解决方案的体验: 背景:

    我最初尝试创建一个 node.js 解决方案(我在几个地方读到任何服务器都是可行的)。 但是,即使在获得 Zebra 签名证书之后,在几次失败的连接尝试之后 - 并且打印机/服务器通过了成功的握手过程 - 它仍然失败并出现一个神秘的错误,当调查时与试图验证特定 Tomcat 的打印机有关正在使用版本/服务器!!!???

    我确实收到了 Zebra 开发人员的回复,该开发人员正在开发 .Net 解决方案,但也无法使其正常工作,并且正在等待 Zebra“工程师”提供更多信息,然后才能完成解决方案。他们说他们会在收到信息后将其发送出去,并希望在一周内收到(超过一周 - 还没有运气)。

    所以 - 我决定组装一个 Tomcat 服务器 - Zebra 唯一可以运行的示例...我让示例 servlet 运行,但开始遇到新的证书问题(因为我已经更改了服务器/域等) 这让我想到了整个笨重的过程 - 并认识到了第一个交易破坏者 - 非常严格的 ssl 身份验证和签名过程太冒险了。

    例如假设您有 100 多个客户依赖此解决方案。 如果您曾经遇到过证书问题(例如域名更改、服务器设置更改或证书失效/到期),那么所有 100 多名客户都没有他们的打印机。 但是您不能自己修复它-修复/生成新证书等。重新签名过程很慢并且依赖于外部资源! (顺便说一句,这是一个手动 Zebra 流程 - 您通过电子邮件发送,然后在 Zebra 员工回复签名证书之前等待相当长的时间)。

    这意味着所有 100 多位客户在相当长的一段时间内都没有打印机服务,但您别无选择,只能让 Zebra 签署您的证书。对我来说,这是一个不可接受的风险 - (websocket 解决方案不应该依赖于 Zebra 签名证书 - 毕竟您正在安装您的(或您的客户)打印机,然后您配置打印机为其指定一个确切的域名/地址连接到)。

    使用您的迷你服务器解决方案 - 如果客户有问题 - 它只会影响该单个客户,并且您不依赖外部公司签署证书来解决问题。

    以下是已识别的问题及其相关风险。

    问题 1) 实现得很差 - 我不能(他们也不能)让它连接到标准服务器,而不是非常特定的 Tomcat 设置!!! 风险级别:低 - 即这是初始成本和时间负担 - 但一旦工作,这个问题导致进一步问题的持续风险是最小的。 风险: a) 将开发限制在非常具体的服务器和技术上。 b) 增加初始开发/测试的时间和成本。

    问题 2) 记录不充分 - 我已经确定(并且 Zebra 已验证)文档中的几个错误 - 文档也分散,重要信息被放入一个很难找到的 readme.txt 文件中,与文档的其余部分分开。 风险级别:低 - 即这是初始成本和时间负担 - 但一旦工作,这个问题导致进一步问题的持续风险是最小的。 风险: a) 减缓初始发展。 b) 增加初始设置/开发的时间和成本。

    问题 3) 打印机安全/ssl 身份验证计划和实施不当。它涉及多个步骤 - 非常严格,并且涉及缓慢的斑马签名过程,这会产生持续的风险。 风险级别:高 - 即这是我们无法使用此解决方案的原因。 风险: a) 将开发限制在非常具体的服务器和技术上。 b) 减缓初始发展。 c) 增加初始设置/开发的时间和成本。 d) 对项目造成持续的高级别风险,如下所示: ---> 这个想法是公司将依赖此打印机连接解决方​​案 - 因此任何潜在的停机时间都会导致重大业务中断。 ---> 以下任何一种情况都意味着依赖此 websocket 解决方案的所有客户在组织新的 Zebra 签名证书时将有几天没有打印机服务: ---> 1) 证书过期,2) 证书无效,3) 服务器已移动,4) 域详细信息更改,5) Tomcat 服务器设置已修改(由于打印机验证某些 Tomcat/服务器设置的方式) ---> 此外,上述 5 种情况仅根据我目前的测试得知 - 可能还有其他可能的限制,这可能意味着我还没有遇到过证书失败。

    总结: IMO 问题 3 带来了不可接受的风险,在我重新考虑 Zebra websockets 之前,需要发生以下 2 件事。 1) 他们需要有关 websockets 如何连接到服务器的适当文档,因为它是隐藏的,甚至 Zebra 员工目前也处于黑暗之中。 2) 他们需要删除一些身份验证限制 - 这样您就可以解决任何问题而无需耗时的 Zebra 交互。

    【讨论】:

    • 我已经购买了 ZD-420 linkos 打印机,并且在一周内我设法在 Python 中设置了一个 PoC websocket 服务器,打印机连接到该服务器,并且一旦连接的服务器在 ZPL 中推回打印作业。文档有所帮助,这不是我所希望的,但我相信一旦我解决了这个问题并将代码发布到 github,使用 Zebras 创建解决方案会容易得多。
    【解决方案2】:

    Zebra 确实提供了可以通过 websocket 进行通信的打印机。如果您的 Web 服务器是公开可用的(即在“互联网”上可用),您可以在打印机和服务器之间打开一个 Web 套接字连接,并在有新信息提供服务时简单地发送数据。虽然听起来您需要打印机来启动对话,但也许拥有一个不断打开的 websocket 连接将帮助您满足您的需求。这消除了对任何中间计算机的需求,打印机直接与服务器对话。

    Zebra Websocket 打印机:http://www.zebra.com/us/en/products-services/software/link-os/cloud-connect.html

    斑马 (Java) SDK:http://www.zebra.com/us/en/products-services/software/link-os/link-os-sdk.html

    如果您需要支持此功能的热敏收据打印机,iMZ 型号应该就足够了。

    【讨论】:

    • 杰森!!!你是男人!我和斑马通了两个小时的电话,他们不知道我在说什么。我对任何允许我在没有 PC 的情况下从 A 点到 B 点获取信息的解决方案都没有任何问题。我想我会尽快购买其中一个。你知道关于 websockets 的任何文档吗?从我的简短搜索中,我发现它还没有标准化。我想在我的服务器端使用 PHP。看起来我会在 LinkOS 上对应用程序进行编程,以通过 websocket 与我的服务器通信。您可以提供的任何其他信息显然都非常有价值。
    • 我相信 websockets 被认为包含在 HTML5 保护伞下。使用 Zebra 打印机,所有 websocket 连接都通过 TLS 保护,因此希望这可以减轻您的任何安全问题。老实说,Websocket 教程对您来说不是必需的,因为 Zebra SDK 将所有 Websocket 设置从您手中抽象出来。您只需将打印机配置为指向您的 Web 应用程序(使用 Zebra SDK)。 SDK 是用 Java 编写的,我不知道如何将它与 PHP 集成。我自己只将 SDK 与 Apache Tomcat 和 Java Web 应用程序一起使用。
    • 明确一点 - Zebra 打印机提供了很多技术,包括对打印机本身进行编程以进行出站通信的能力(请向您的经销商咨询 ZBI)。我不知道 ZBI 是否可以通过 websockets 进行通信。如果 ZBI 不支持 websocket 通信,您的打印机将有效地成为一个“从属”打印机,只执行它被告知的操作。它将无法向服务器索取任何东西;相反,服务器将不得不将信息强制发送到打印机。使用 websockets,这是微不足道的。但是,如果没有 ZBI,打印机就不能被“编程”来请求数据。
    • 我与经销商交谈过,他们不知道我在说什么。我询问了 Link-OS 云连接,没有人可以给我任何信息。我下载了 SDK 并看到了方法。我不知道如何实现它。看起来它是在今年一月发布的。 Zebra 说他们会让一个技术难度较小的人给我回电话,但我仍在等待。根本没有设置说明。你有什么资料吗?我计划在这个周末订购一台打印机,这样我就可以进行试验了,但我不知道从哪里开始。如果有一个开始,我会非常足智多谋。
    • @Mark 您是否设法使此设置正常工作?我打算购买 2 台打印机,但我担心网络链接功能的可靠性。您能否评论一下您在网络链接设置方面的经验。谢谢!
    【解决方案3】:

    我已经成功创建了 mini websocket 服务器来与 ZD420 - LinkOS 驱动的 Zebra 打印机通信。

    为了配置打印机,我写了一个小的 python 实用程序(在 linux 上测试) https://github.com/elops/zebra-wifi-tool

    此工具将设置打印机连接到 wifi 网络,并通过该 wifi 网络连接到 weblink 位置。 weblink location 是您的 websocket 服务器的 URL 的 Zebra 名称。您可以通过 websocket 轻松调整配置、发送打印作业等等。

    使用asynciowebsockets 使用python 3.5 对websocket 服务器的Python 实现进行了编码

    核心功能基本上是来自此处的文档的 c/p http://websockets.readthedocs.io/en/3.4/intro.html#both

    你需要 3 个协程:

    • 1x 连接处理程序
    • 1x 制作人
    • 1x 消费者

    连接处理程序: 这个协程负责监听你的 websocket 上首先发生的事情,是数据接收还是数据发送。无论哪个先发生,其他的都会被取消并循环。

    制作人: 该协程用于通过活动的 websocket 将数据推送到 IoT 设备。

    消费者: 这个协程被馈送到物联网设备通过 websocket 发送到服务器的数据。

    Websocket 握手看起来像这样 start_server = websockets.serve(handler, 'localhost', 6000, subprotocols=['v1.weblink.zebra.com'], extra_headers={'Content-Length': '0'})

    整个事情就像魅力一样,非常可靠且高度可配置且功能丰富的解决方案适用于您需要从 Web 应用程序打印到连接到 Internet 的打印机的各种场景。我已将条码扫描仪与 ZD420 打印机配对。扫描的数据可以通过用于打印的相同 websocket 打印机轻松发送到 websocket 服务器,因此您可以为网络上的 POS 环境创建强大的解决方案。

    【讨论】:

      【解决方案4】:

      尝试使用支持应用程序启用打印 (AEP) 的 SATO 打印机(请参阅 SATO America 或 SATO Europe)。在这里,您可以使用 Cloud 或服务器设置 websocket。打印机还允许 https 请求以及 ftp 轮询。例如,您可以从通过 USB 主机端口连接到打印机的扫描仪或键盘触发打印作业。效果很好!并且不需要像前面描述的情况那样使用第二个云。

      【讨论】:

        猜你喜欢
        • 2019-02-14
        • 1970-01-01
        • 1970-01-01
        • 2013-03-06
        • 1970-01-01
        • 2022-12-19
        • 2013-03-16
        • 1970-01-01
        • 2012-10-05
        相关资源
        最近更新 更多