【问题标题】:Why get wrong total page of N-Up printing using Win32_PrintJob/C#?为什么使用 Win32_PrintJob/C# 得到错误的 N-Up 打印总页数?
【发布时间】:2017-11-30 01:51:52
【问题描述】:

我正在用 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 Slides-In-One Page)时,它出错了,我无法获得正确的总数打印。

有没有人遇到过这个问题~请帮忙,非常感谢

【问题讨论】:

  • 您如何获得页数,什么是“错误”?
  • 结果是错误的意思(只在N-Up打印的模式下),比如我打印的是10页的ppt;但是我打印的是5合1模式的ppt(打印一页5张幻灯片)。总页数应该是2,但它是10。
  • 我使用 JOB_INFO_2.TotalPages 得到总页数
  • 您确实应该在您的问题中提供尽可能多的信息。您没有告诉我们您正在测试的应用程序。它是谷歌幻灯片文档还是其他什么?哪些应用程序有效,哪些会导致问题?结果如何?

标签: c# printing wmi printers


【解决方案1】:

您的问题与另一个问题相似(请参阅我的 answer there 并点击链接了解更多信息),但也许它的不同足以保证这里有不同的答案。

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

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

【讨论】:

  • 你能告诉我如何解析打印假脱机文件的详细信息吗?现在我使用 spool API 来暂停打印作业;但我找不到找到 NUP 作业的实际打印计数的方法。
  • 做得好,但正如我在其他答案中所说,页数计数是一项不平凡的任务 - 取决于您想要支持的打印语言。 EMF(如果不是假脱机,相当明确)、PCL-XL(明确定义)、PCL(许多变体)、PostScript(一种强大的语言)......公司在这个问题上花费了大量资金。看看undocumented 多少钱,或者如果你是为了好玩,也许你可以使用GhostScript
  • 谢谢,我试试
  • 我们尝试了很多次,但是在打印N-up ppt时仍然无法获得正确的页数。您有没有解决过这个问题或者您能给我们一些指导吗~谢谢
  • 对不起,我在这个竞争激烈的领域工作,所以我已经尽可能多地说了。这不是魔法:您寻求的答案在假脱机文件中,但主题比 Stack Overflow 答案更大:这是一份职业! ; - )
猜你喜欢
  • 2011-11-07
  • 2021-04-03
  • 1970-01-01
  • 1970-01-01
  • 2018-11-08
  • 2011-04-11
  • 1970-01-01
  • 1970-01-01
  • 2011-04-08
相关资源
最近更新 更多