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

时间:2014-11-07 04:07:56

标签: c# .net printing

我想在.NET 4中使用C#获取排队的打印作业及其文件路径列表。我查看了this,但没有看到任何关于filepath的内容。我尝试了以下代码(从某个地方的示例修改),希望job.Namejob.JobName是我正在寻找的,但它不会运行:

当有作业时,

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

所以有两个问题:

  1. 为什么NullReferenceException
  2. 如果此方法失败,还有其他方法可以获取排队的文件路径吗?
  3. 提前致谢!

    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));
            }
        }
    }
    

1 个答案:

答案 0 :(得分:1)

事实证明,只有在打印机脱机时才会发生异常。当打印机联机时,job.Name提供文件路径,而job.JobName仅显示“打印系统文档”。