网络服务器作为打印机?

网络服务器作为打印机?

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

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

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

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

或者我正在考虑编写我们自己的桌面软件,作为假打印机,然后连接到我们的网络服务器来上传要打印的文件?

答案1

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

网络打印机使用一些标准的打印作业提交协议 -独立电力供应站(端口 631),惠普 JetDirect(端口 9100),偶尔车牌识别(端口 515)。

其中,独立电力供应站是您最感兴趣的选择,因为它实际上是基于 HTTP 的(即您可以在 Web 服务器上实现它),而且因为它有用于无驱动打印的“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 的打印机,您仍然很可能会在此过程中丢失可填写表格或数字签名等功能。

答案2

我意识到这已经是两年后了,但由于我只是在当前搜索中发现这一点,也许这会对某些人有所帮助......

我需要做这件事来接收仅支持打印和电子邮件的软件的输出。我找到了 Miraplacid Text Driver。诚然,目前的价格是 53 美元,但它的安装方式与打印机类似,可以将打印内容转换为文本,并且可以执行以下任一操作:将文本发送到 FTP、可自定义的文件名、HTTP(作为带有文件的 Web 表单)、电子邮件和/或在另一台打印机上打印。

我将输出发送到以日期/时间命名的文件进行记录,并将输出发送到 HTTP,我的 Web 服务器在其中记录它以供守卫岗位确认。

Miraplacid 还有一款“Publisher”产品,功能相同,但将打印内容转换为图形格式(jpeg、png、PDF 等)。

打印机也是可共享的,因此一台服务器可以托管打印机,任何人都可以使用它进行打印。我认为这对我来说是一个相当优雅的解决方案。

大约 15 年前,我编写了一个 LPD 打印机程序,用于拦截打印输出,但是 Windows 更新破坏了它,而我又没有时间维护代码。对于我需要捕获的工厂警报来说,53 美元是一笔小投资。

相关内容