作为打印机的网络服务器?

Jac*_*ham 3 networking printing

我想弄清楚什么技术可以让我控制的 Web 服务器在 Chrome 中显示为打印机。这将由用户手动添加。但我不知道是什么控制了 Chrome 中显示的打印机。我注意到当您单击“管理”时,它会打开您操作系统的设置……所以我想它可能不是网络服务器,而是必须是特定协议?

在这种情况下,我想知道您是否需要 VPN 来执行此操作,然后 VPN/网络会添加假打印机。

目的是获取正在打印的文件,然后在服务器端能够存储它或将其下载到其他客户端。

这是一个特定的用例,它不仅仅是我可以做的文件上传/下载。但我特别在寻找印刷方面。就像打印机 API。

或者我正在考虑编写我们自己的桌面软件,该软件将成为假打印机,然后连接到我们的 Web 服务器以上传打算打印的文件?

use*_*686 5

任何主机都可以伪装成网络打印机,只要它使用相同的协议——这就是打印服务器的工作方式。大多数操作系统都允许您通过 URL 添加网络打印机。

网络打印机使用一些标准的打印作业提交协议 - IPP(端口 631)、HP JetDirect(端口 9100)和偶尔lpr(端口 515)。

其中,IPP对您来说是最有趣的选择,因为它实际上是基于 HTTP 的(即您可以在网络服务器上实现它),而且因为无驱动打印的“IPP Everywhere”标准允许打印作业以标准 PDF 文件的形式提交,而不需要供应商特定的驱动程序。

从头开始实施 IPP 可能很复杂;然而,Linux/macOS 的“CUPS”软件虽然主要用于本地打印,但它的核心实际上是一个 IPP 服务器——你可以将它配置为有一个假队列,以某种方式将作业存储在文件系统上。

如果您无法让客户将作业作为“无驱动”PDF 文件提交,那么请寻找以 PCL5 格式提交作业的驱动程序(Ghostscript 可以将其转换为 PDF 进行预览,并且您的打印机很可能直接在端口 9100 上接受 PCL5) . 此时,您不一定需要使用 IPP——您也可以编写一个服务器,通过 JetDirect 或 lpr 来接受相同的打印作业。


补充说明:

请记住,打印不会将原始文件发送到打印机。无论您是打印 PDF、DOC 还是 JPEG,客户端总是将其光栅化为某种通用格式,因此网络打印机(或您的打印服务器,在这种情况下)只接收最终光栅格式的作业——它对原著一无所知。

这意味着仅实现网络协议是不够的——您还需要了解客户端发送给您的光栅格式。(这取决于客户端使用的打印机驱动程序;例如,通过 Kyocera 驱动程序打印将生成 KPDL 格式的打印作业。)这就是“IPP Everywhere”的用武之地——如果您想接收 PDF,您将不得不假装成为使用 PDF 作为其光栅格式的“无驱动”打印机。

意味着打印将失去原始文档的所有“数字”功能。即使您将 PDF 打印基于 PDF 的打印机,您仍然很可能会在此过程中丢失可填写表格或数字签名等功能。