首页 > 解决方案 > 从网络应用程序打印具有特定设置的文件

问题描述

对于一个客户,我正在构建一个移动应用程序,用户可以在其中选择多个相框。他们可以使用他们的移动设备将照片添加到此框架中。完成后,用户将被发送到付款屏幕。支付订单后,系统将创建一个二维码。使用该 QR 码,他们可以前往我们的物理支柱之一,在那里他们可以扫描 QR 码。一根柱子上有一台电脑(Windows 10)、一个二维码扫描仪和一台连接的打印机(三菱 D90)。系统检查订单并开始打印作业。目前,支柱计算机正在以信息亭模式运行浏览器。

在此处输入图像描述

问题

框架可以有不同的尺寸:

当我使用本机打印窗口时,一切似乎都运行良好。我的框架非常适合页面。我可以选择不同的页面尺寸,并且可以使用内部切刀。但是我想自动化整个过程。系统应该能够在不同大小之间切换,并且应该能够将作业直接推送到队列中。

方法#1

因为计算机正在运行一个浏览器窗口,所以我的第一个想法是设置一个 NodeJS 应用程序,它可以从服务器获取帧并将作业直接推送到队列中。我调查了Node-Printer。在我的 Macbook(使用 CUPS)上,一切都像魅力一样,但不幸的是,支柱正在运行 Windows。我尝试将所有内容设置为与我在 Macbook 上的工作方式相同,但我无法处理打印作业。我收到了作业已发送到我的打印机的消息。我花了好几天的时间试图让它工作,但在 Windows 上运行的节点打印机有很多限制。我还尝试创建一个 Ubuntu 分区以查看它是否可以从那里工作,但它导致了同样的问题。

方法#2

我的第二个想法是将打印机设置为 Google 云打印机。这样我就可以将作业从我的网页直接推送到 Print API。但是,在选择与使用本机打印窗口相同的设置时,我发现了很多限制。左边是原生打印窗口,右边是谷歌打印窗口。

在此处输入图像描述

我还尝试使用Printer Lookup API获取打印机设置。我可以看到很多设置(还有页面大小),但每次我尝试打印一些东西时,打印出来的东西都不一样。框架太小、太大、错误旋转、奇怪的边距等。我尝试了 100 种不同的打印以及所有可能的设置组合,但没有一种接近我在使用本机打印对话框时得到的结果。

我也尝试过 Electron,但我无法指定任何设置。我假设这也是使用类似节点打印机的解决方案。

我真的不知道在哪里看或如何解决这个问题。我花了太多天试图弄清楚发生了什么。还有其他我没有想到的(好)方法吗?有没有办法在 Google 云打印中获得相同的设置?

TL;DR:需要帮助从浏览器窗口(或像 Electron 的包装器)推送队列中的打印作业。可以通过 Google Cloud Print 之类的 API 或直接 USB。

标签: node.jswindowsprintingusbgoogle-cloud-print

解决方案


尝试使用 Google 云打印并在您触发打印时提供您自己的设置。

https://developers.google.com/cloud-print/docs/appInterfaces#submit

参考上面的文档。当你提交一份工作时,添加一个名为“ticket”的额外参数。并在工单中指定介质尺寸。

它看起来像这样:

ticket :   {"version":"1.0","print":{"media_size":{"width_microns":210000,"height_microns":297000,"is_continuous_feed":false,"vendor_id":"ISO_A4"}}}

(^指定要打印的高度和宽度尺寸)

您可以在以下 pdf 的主题 4.2 下找到标准尺寸:

http://ftp.pwg.org/pub/pwg/cloud/white/Google_GCP/CDD_2013-11-06.pdf

尝试使用不同的高度和宽度组合以获得所需的结果


推荐阅读