如何使用.NET以提交的顺序打印报表

时间:2012-10-18 18:57:56

标签: vb.net winforms printing printqueue

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

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

TIA

2 个答案:

答案 0 :(得分:2)

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

enter image description here

答案 1 :(得分:2)

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

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

PrintQueue Class

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

这样的东西

PrintQueue.GetPrintJobInfoCollection

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

Server2008和VistaSP2及更高版本支持上述功能。对于XP及更早版本,您可能需要遵循以下内容:

How to query the print queue on Windows

也许通过倾听:

WM_SPOOLERSTATUS