0

我们的 VB WinForms 应用程序使用标准 PrintDocument 对象打印一系列报告,其中一些具有多个页面。我的客户指出,硬拷贝报告的打印顺序不正确。当我调试代码时,我可以验证报告是以正确的顺序生成的,但是当我检查打印队列时,报告并没有按照它们提交的顺序显示。当我按提交(日期时间)对队列进行排序时,会显示正确的报告顺序。

有没有办法从 VB.NET 设置打印队列,以便按日期时间顺序排列和打印多个报告?还是我在错误的洞里钓鱼?

TIA

4

2 回答 2

2

关闭打印机上的后台打印,以便应用程序直接打印到打印机。这是在打印机属性的高级选项卡上。

在此处输入图像描述

于 2012-10-18T19:18:26.527 回答
2

这是打印假脱机的效果。项目在完成假脱机之前不会添加到打印队列中,因此它们将按照完成假脱机的顺序而不是打印顺序排队。大文件(带有图像等)的假脱机时间比小文件要长,因此如果后打印的项目更快地假脱机,它们可能会先完成假脱机。您可以禁用打印假脱机(如建议的那样),但这会使打印变得繁琐,因为所有应用程序都会阻塞打印作业,直到它们完成,而不是让假脱机完成工作。

另一种方法可能是在您自己的应用程序中查询打印队列 - 在您确认已完成假脱机(如果正在使用假脱机)之前,不要发送您的下一个打印作业。这绕过了笨拙的解决方案,即强制您的用户更改系统设置并强制其他程序无法访问打印假脱机的便利。看 :

打印队列类

与上面可以编程修改阀芯/直接设定̶(而不是做它通过打印机属性手动)̶或(没关系,该属性是只读的。)可能会更好,使用类似

PrintQueue.GetPrintJobInfoCollection

发送打印作业时监控队列。

以上在 Server2008 和 VistaSP2 及以上版本中都支持。对于 XP 及更早版本,您可能需要遵循以下类似的内容:

如何在 Windows 上查询打印队列

也许通过听:

WM_SPOOLERSTATUS

于 2012-10-18T19:38:23.123 回答