【问题标题】:How to print from the webserver to the local network printer directly using phone or tablet browser?如何使用手机或平板电脑浏览器直接从网络服务器打印到本地网络打印机?
【发布时间】:2021-04-28 13:39:22
【问题描述】:

我有一台网络打印机(POS 打印机)连接到我的路由器,并且我有打印机的 IP 和端口。我想直接从网络服务器发送打印指令。例如,如果我访问 example.com/print.php,它会将指令发送到我的本地网络打印机并开始打印。 重要的是,可以从同一网络上的任何设备访问此网页,并且能够将打印指令发送到我的本地网络打印机。

这是我到目前为止所做的,使用 localhost/print.php 我可以使用任何浏览器成功地将打印指令发送到本地网络打印机,因为它们都在同一个网络中。但是 localhost 在 iPad 上不起作用。

This is what I have so far, printing via localhost using computer browsers.

我正在使用这个 GitHub 代码 escpos-php 成功地从 localhost 打印到本地网络打印机,下面是代码示例:

<?php
require __DIR__ . '/vendor/autoload.php';
use Mike42\Escpos\Printer;
use Mike42\Escpos\PrintConnectors\NetworkPrintConnector;

try {
    $connector = new NetworkPrintConnector("192.168.1.87", 9100);
    $printer = new Printer($connector);
    $printer -> text("Hello World!\n");
    $printer -> cut();
    $printer -> close();
} catch (Exception $e) {
    echo "Couldn't print to this printer: " . $e -> getMessage() . "\n";
}
?>

现在,这段代码很容易执行,而且工作起来很神奇,但是当我尝试从我的服务器运行相同的代码时,它无法连接到打印机,因为它们不在同一个网络中。我检查了此代码的作者常见问题解答部分并找到了此答案。

解决方案 1: 构建您的应用程序,以便服务器可以看到您的打印机。

解决方案 2:使用运行客户端的应用程序来传送打印数据。

第二个解决方案是这个问题的一个很好的解决方案,但这是我想要实现的。

This is what I'm looking for, printing via the webserver using any device within the local network.

请注意,连接到路由器的计算机不再运行。

当我访问 example.com/print.php 网页时,它会通过网络服务器向打印机发送指令,但正如您在这种情况下看到的那样,服务器无法与打印机通信。

在第一个解决方案中,作者提供了以下选项:

选项 1:改为在 LAN 上运行您的服务器,并阅读上面有关通过网络打印的部分

选项 2:设置 VPN,以便您的云托管服务器也可以访问 LAN

选项 3:通过 SSH 或 TLS 通过其他一些安全隧道将打印机暴露给服务器

我猜第一个选项不适合我,但第二个选项是设置 VPN,以便我的云托管服务器也可以访问 LAN。这是一个很好的解决方案,但在某些时候,会有数百名像我这样的用户通过同一个网络服务器使用数百台打印机,我猜在这种情况下使用 VPN 并不能很好地工作。

此时,第三个选项很有希望,如果计算机不再运行,我如何通过安全隧道通过 SSH 或 TLS 将打印机公开到服务器。

是否有任何简单的方法可以仅使用打印机的 IP 和端口将打印指令从网络服务器发送到本地网络打印机?如果这意味着将打印机暴露在互联网上或移除防火墙。

【问题讨论】:

    标签: php printing vpn remote-server local-network


    【解决方案1】:

    关于 VPN 和 SSH 方法的问题,我没有找到合适的解决方案。

    我还问是否有任何简单的方法可以仅使用打印机的 IP 和端口将打印指令从网络服务器发送到本地网络打印机?即使这意味着将打印机暴露在互联网上。

    我已经为这部分找到了一个端口转发的解决方案,但不建议使用默认端口,因为它可能会带来一些安全问题。这是一个解决方法:

    假设您的公共 IP 为 204.269.97.261,随机端口为 51000,打印机的私有 IP 为 192.168.1.87,端口为 9100。

    当用户从任何设备从任何网络浏览器发送指令时,指令将转到公共 IP:204.269.97.261 和端口:51000。现在您需要配置路由器以将此指令转发到专用 IP:192.168 .1.87 和端口:9100。

    要了解如何为您的路由器型号进行端口转发,请访问 https://portforward.com/ 并搜索您的路由器型号。

    完成后,您可以通过访问 https://www.canyouseeme.org/ 检查端口转发是否正常工作,如果您收到类似 "Connection Refused" 之类的错误,那么这是完全不同的问题,如果该端口被阻止或其他原因,可能需要询问您的 ISP。

    注意:请勿将默认端口与公共 IP 一起使用,并使用随机端口以避免安全风险。

    【讨论】:

      【解决方案2】:

      通过使用 remote.it 服务,我设法达到了最佳效果。 这样,我可以直接从实时服务器与本地 LAN 打印机进行通信。我只需要为端口 9100 设置一个 TCP 代理。默认情况下它是安全的,您可以使用其内置 API 轻松设置 IP 限制。

      【讨论】:

      • 感谢您的建议。我一定会试试这个,因为安全是一个大问题。
      猜你喜欢
      • 2012-11-02
      • 1970-01-01
      • 2011-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-22
      • 1970-01-01
      相关资源
      最近更新 更多