【发布时间】:2016-07-21 11:51:52
【问题描述】:
嗯,我有一个基于 Web 的应用程序(用 Elixir/Phoenix 框架编写)。这是餐厅的一种POS。
系统在 rpi 3 上运行,带有两台可访问的打印机。一个是本地USB,一个是网络打印机,通过WIFI路由器连接。当我需要打印一些东西时,两台打印机都设置了 CUPS 并且工作正常。 我使用的是 Chromium 浏览器,并且“--kiosk --kiosk-printing”开关。然而,这就是它变得棘手的地方。 因为我使用的是自助服务终端打印,所以在发送作业时,打印对话框(用于选择打印机)没有出现,并且默认为默认打印机。由于自动化,我需要使用静音打印。所以服务员不需要每次都选择打印机。 在网络应用程序中,我有某些 div 需要打印到一台打印机,而其他的需要打印到另一台打印机。我正在使用简单的 JS 进行打印,但是我不能纯粹用 JS/HTML 指定要使用哪个打印机,用于哪个作业。 (一台打印机打印账单,第二台打印机打印订单到厨房)我需要将作业发送到不同的打印机。不知道如何制作,但任何建议表示赞赏。
提前致谢! 更新: 发现 Jsprintsetup 可能有帮助的 Firefox 插件。现在将测试。 更新 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
【问题讨论】:
标签: printing raspberry-pi elixir chromium phoenix-framework