我正在用 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 张幻灯片)时,它会出错,我无法获得正确的打印总数。
有谁遇到过这个问题吗~请帮忙,非常感谢
您的问题与另一个问题类似(请参阅我的在那里回答 https://stackoverflow.com/a/47064399/313445并点击链接获取更多信息)但也许它的不同足以保证这里有不同的答案。
基本上,并非所有打印驱动程序都支持 NUP。您正在使用的应用程序可能正在检查DEVMODE https://msdn.microsoft.com/en-us/library/windows/desktop/dd183565(v=vs.85).aspx(或忽略它)并自行处理 NUP 而不是让 Spooler 处理它 https://www.experts-exchange.com/articles/2090/How-to-set-Pages-Per-Sheet-Programmatically-for-N-Up-Printing.html.
正如我在另一个答案中所说,所有应用程序和驱动程序都不能依赖 Windows 页面计数。新的 XPS 打印系统可能会改善这一点,但对于旧的应用程序和驱动程序,获得可靠页数的唯一方法是解析打印后台文件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)