立即将打印作业发送到打印机,无需排队,即提高打印性能

立即将打印作业发送到打印机,无需排队,即提高打印性能

我有一个 ruby​​/rails Web 应用程序,其中一个操作是将应用程序生成的 PDF 文件发送到网络上的 Xerox 4127 打印机。这是通过退出并运行多个 lpr 命令(默认打印队列,使用 -s 防止假脱机副本,使用 -o InputSlot 识别托盘)来完成的。 PDF 无法合并为一个文档/打印作业,因为它们会根据文件具体情况和所需纸张颜色发送到不同的托盘。一个“周期”可能包含 15k 或更多页面,每次以 20 或 30 至数百个为批次发送到打印机。

我使用通用 pcl 6 gutenprint 驱动程序将服务器上的打印机设置为 lpd 队列。 Xerox 不提供 Linux 驱动程序,但表示它可以与 lpd/lpr 配合使用。确实如此 - 我能够成功发送文档,无论是从命令行还是通过 Web 应用程序手动发送。

该过程的原型是 Foxpro 中的 Windows 程序。该原型为批次的每一页生成一个 PDF,并将其作为单独的打印作业发送。因为打印机有一个公制的内存按钮,所以原型只是将一个又一个的作业转储到打印机,并允许打印机管理所有这些作业,它做得很好。一批数百页/打印作业几乎立即排队进入打印机,打印机几乎没有停顿地将它们吐出,就好像它们是一个巨大文档的一部分一样。

我的 Web 应用程序实际上将发送到同一个托盘的页面一个接一个地组合成一个 PDF,所以我实际上期望事情会更快,但事实并非如此。这个过程要慢一个数量级。在原型中运行需要 8 小时的“周期”在 Web 应用程序中需要几天的时间才能完成。

似乎正在发生的情况是,打印作业没有像原型中那样“转储”到打印机。通过屏幕上的实用程序监控打印机,我们一次只能看到一项打印作业。服务器上的打印队列似乎正在等待发送每个打印作业,直到打印机返回前一个作业已完成的信号。因此,我们不会像一个文档一样不断地吐出所有内容,而是得到一页,然后在下一个文件进入时暂停,然后几页,然后暂停,然后一页,然后暂停,等等...... . 你明白了。

服务器上的打印队列实际上正在等待打印机说“完成”吗?如果是这样,我是否可以将其配置为仅发送、发送、发送而不等待从打印机返回的通信?

两个注意事项:服务器位于另一栋建筑物中,但我们在与打印机完全相同的子网上对一台机器进行了一些测试,没有看到任何可测量的改进,即似乎与网络无关。同样,我知道 lpr 在发送之前会将 PDF 文档转换为 postscript,因此我预先转换了它们并在没有转换的情况下测试了该过程。服务器的排队过程有所改进,虽然不是特别显着,但对一次只有一项作业发送到打印机的事实没有影响,我认为这是根本问题。

相关内容