如何在C#中获取队列中打印作业的文件路径



我想在.NET4中使用C#获得排队打印作业及其文件路径的列表。我看了一下,但没有看到任何关于filepath的内容。我尝试了以下代码(从某个示例修改而来),希望job.Namejob.JobName是我想要的,但它没有运行:

当有作业时,调用GetPrintJobInfoCollection()总是引发NullReferenceException(打印机脱机,因此作业总是在队列中等待)。当作业从队列中删除时(通过单击右下角的打印机图标),不会发生异常。

所以两个问题:

  1. 为什么选择NullReferenceException
  2. 如果此方法失败,还有其他方法可以获得排队的文件路径吗

提前感谢!

public static void testPrinter()
{
    PrintQueueCollection printQueues = null;
    PrintServer printServer = new PrintServer();
    printQueues = printServer.GetPrintQueues(new[] { EnumeratedPrintQueueTypes.Local, EnumeratedPrintQueueTypes.Connections });
    foreach (PrintQueue printQueue in printQueues)
    {
        foreach (var job in printQueue.GetPrintJobInfoCollection())
        {
            Console.WriteLine(string.Format("jobname={0} name={1} size={2} status={3}", job.JobName, job.Name, job.JobSize, job.JobStatus));
        }
    }
}

事实证明,只有当打印机脱机时才会发生异常。当打印机联机时,job.Name给出文件路径,而job.JobName只显示"打印系统文档"。

最新更新