为什么使用Win32_PrintJob / C#会出现错误的N-Up打印总页数?

时间:2017-11-30 01:51:52

标签: c# printing wmi printers

我正在使用C#中的程序暂停并获取打印时的总页数,这是主要代码:

string wql = "SELECT * FROM Win32_PrintJob";
ManagementObjectCollection mos;
Dictionary<uint,short> checkedJobs = new Dictionary<uint,short>();

while (true)
{
      Thread.Sleep(SleepTime);
      try
      {
           mos = new ManagementObjectSearcher(wql).Get();
           if (mos != null && mos.Count > 0)
           {
                foreach (ManagementObject mo in mos)
                {
                    if (mo != null)
                    {
                        uint jobId = ProcessJob(mo);
                        if (!checkedJobs.ContainsKey(jobId))
                            checkedJobs.Add(jobId, 0);
                        }
                    }                        
                }
                // ...
           }
      }

它在正常任务下工作正常。但在N-Up打印中,当我在一个页面中打印多个幻灯片(N幻灯片一页)时,它出错了,我无法获得正确的总计数打印。

有没有人见过这个问题〜请帮助,非常感谢

1 个答案:

答案 0 :(得分:0)

您的问题类似于另一个问题(请参阅我的answer there并点击此链接了解更多信息)但也许它的不同之处在于可以在此处提供不同的答案。

基本上所有打印驱动程序都不支持NUP。您正在使用的应用可能会检查DEVMODE(或忽略它)并自行处理NUP,而不是letting the Spooler handle it

正如我在另一个答案中所说的那样,所有应用和驱动程序都无法依赖Windows页面数量。使用新的XPS打印系统可能会有所改善,但对于旧的应用程序和驱动程序,获得可靠页数的唯一方法是解析打印假脱机文件。