"无声"打印多台打印机

时间:2016-07-21 11:51:52

标签: printing raspberry-pi elixir chromium phoenix-framework

好吧,我有一个基于Web的应用程序(用Elixir / Phoenix框架编写)。它是餐馆的POS类型。

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

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

由于我正在使用自助服务终端打印,因此在发送作业时,打印对话框(选择打印机)不会出现,默认为默认打印机。由于自动化,我需要使用静音打印。所以服务员不需要每次都选择打印机。

在网络应用程序中,我需要将某些div打印到一台打印机上,而将其他打印机打印到另一台打印机上。我使用简单的JS进行打印,但是我不能完全用JS / HTML来指定要使用哪种打印机。 (一台打印机打印钞票,第二台打印机打印订单到厨房)

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

提前致谢!  

更新:发现可能有用的Firefox Jsprintsetup插件。现在考试吧。

更新2:根据@tkowal的建议,我能够做我需要的事情。我最终创建了单独的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

1 个答案:

答案 0 :(得分:1)

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

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