好吧,我有一个基于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
答案 0 :(得分:1)
您可以使用System.cmd/3
与操作系统进行交互。最好能够提供一个命令行解决方案来打印您需要的任何内容,然后通过Phoenix应用程序中的控制器调用它。
浏览器是沙盒,无法访问操作系统中的所有内容,但您的服务器端代码几乎可以执行任何操作。