【问题标题】:Get the total pages from print job从打印作业中获取总页数
【发布时间】:2016-07-28 19:54:26
【问题描述】:

我从Monitor jobs in a printer queue (.NET) 下载了这段代码 现在我想知道打印作业的总页数。 我看到了评论并添加了以下代码:

if ( data[ i ].Field == (ushort)PRINTERJOBNOTIFICATIONTYPES.JOB_NOTIFY_FIELD_TOTAL_PAGES &&
    data[ i ].Type == (ushort)PRINTERNOTIFICATIONTYPES.PRINTER_NOTIFY_TYPE )
{
    uint pagesCount = data[ i ].NotifyData.adwData[ 0 ];
}

但我总是得到错误的页面。 我尝试使用“PrinterQueueWatch”,总页数始终为 0。

【问题讨论】:

    标签: c# printing printqueuewatch


    【解决方案1】:

    您始终可以使用Win32_PrintJob 类来获取打印作业,并且您可以从该打印作业中获取总页数。请记住,在打印作业状态从假脱机转移到打印(我在自己的代码中经历过)之后,总页数才可用。

    在我的例子中,我使用 WMI 来监控打印作业,并在观察者的 EventArrived 事件处理程序上,我添加了一些代码行来获取打印作业的总页数。

    试试这个:

    public void PrintJobChange(object sender, EventArrivedEventArgs e)
    {
        ManagementBaseObject objProps = (ManagementBaseObject)e.NewEvent.Properties["TargetInstance"].Value;
    
        ...
    
        string jobStatus = (string)objProps["JobStatus"];
        uint totalPages = ((uint)objProps["TotalPages"]);
    
        Console.WriteLine("Status: " + jobStatus + ", Total Pages: " + totalPages);
    }
    

    然后PrintJobChange订阅EventArrived处理程序:

    public void MonitorPrintJobs()
    {
        string queryClassName = "__InstanceOperationEvent";
        string queryCond = "TargetInstance ISA 'Win32_PrintJob'";
        TimeSpan queryTimeSpan = new TimeSpan(1);
    
        try
        {
            WqlEventQuery eventQuery = new WqlEventQuery(queryClassName, queryTimeSpan, queryCond);
            ManagementEventWatcher watcher = new ManagementEventWatcher(eventQuery);
    
            if (PrintJobChange != null)
            {
                watcher.EventArrived += PrintJobChange;
            }
    
            watcher.Start();
        }
        catch (Exception ex)
        {
            string msg = string.Format("Error monitoring print jobs. Exception {0} Trace {1}.",
            ex.Message, ex.StackTrace);
            MessageBox.Show(msg, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
        }
    }
    

    仅打印一页到我的虚拟打印机的控制台输出:

    状态:假脱机,总页数:0 状态:打印,总页数:1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-11
      • 2015-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多