"Silent" 为多台打印机打印

"Silent" printing for multiple printers

嗯,我有一个基于 Web 的应用程序(用 Elixir/Phoenix 框架编写)。这是餐厅的一种 POS。

系统在 rpi 3 上运行,有两个可访问的打印机。一种是本地通过USB,一种是网络打印机,通过WIFI路由器连接。当我需要打印一些东西时,两台打印机都设置了 CUPS 并且工作正常。

我使用的是 Chromium 浏览器和“--kiosk --kiosk-printing”开关。然而,这就是它变得棘手的地方。

因为我正在使用 kiosk 打印,打印对话框(到 select 打印机)不会出现,并且在发送作业时默认为默认打印机.由于自动化,我需要使用静默打印。所以服务员不需要每次都 select 打印机。

在网络应用程序中,我有某些 div 需要打印到一台打印机,而其他的需要打印到另一台打印机。我正在使用简单的 JS 进行打印,但是我不能仅使用 JS/HTML 指定要使用哪台打印机,用于哪个作业。 (一台打印机打印账单,第二台打印机打印厨房订单)

我需要的是将作业发送到不同的打印机。不知道怎么做,但任何建议表示赞赏。

在此先感谢!

更新: 找到可能有帮助的 Firefox Jsprintsetup 附加组件。现在将测试。

更新 2: 按照@tkowal 的建议,我能够做我需要的。我最终创建了 dividual tmp 文件(而不是发送 div)并发送它们进行打印。这是我的代码,如果您有兴趣(在 OSX 上测试):

 # Generating tmp for printing and sending jobs
      for item <- order_items do
        file_name = Enum.join([item.order_id, "-", item.id, ".txt"], "")
        file_create = Enum.join(["touch", file_name], " ") 
        file_create |> String.to_char_list |> :os.cmd
        file_inject = Enum.join(["echo", item.food.name, item.quantity, ">", file_name], " ")
        file_inject |> String.to_char_list |> :os.cmd

        # Send to print
        print_path = Enum.join(["~/Developer/elixir/myApp/", file_name], "")
        file_print = Enum.join(["lp", "-d", "HP_LaserJet_3050", print_path], " ")
        file_print |> String.to_char_list |> :os.cmd

        # Remove tmp file
        file_remove = Enum.join(["rm", file_name], " ")
        file_remove |> String.to_char_list |> :os.cmd
      end

您可以使用System.cmd/3与操作系统交互。最好想出一个命令行解决方案来打印您需要的任何内容,然后通过 Phoenix 应用程序中的控制器调用它。

浏览器是沙盒,无法访问您操作系统中的所有内容,但您的服务器端代码应该能够执行几乎所有操作。