如何在c#中使用PrintCapabilities类

本文关键字:PrintCapabilities | 更新日期: 2023-09-27 17:51:01

我正在尝试拦截打印机作业并更改打印作业的属性。我可以拦截打印作业并获取相关信息。我跟着这篇文章看

http://www.codeproject.com/Questions/423178/printing-order-intercept-with-csharp

现在我想改变打印作业的纸张大小,为此我找到了这篇文章

http://social.msdn.microsoft.com/forums/en/windowsxps/thread/8af6ba92 - 5 - d2c - 444 - b - 91 - f4 a8747739c1b7

但问题是我不能创建类PrintCapabilities。我错过什么了吗?请帮助。

我当前的代码如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management;
using System.Printing;
namespace PrintJob
{
    class EvenWatch
    {
        private ManagementEventWatcher manEWatch;
        public EvenWatch(string host)
        {
            System.Management.ManagementScope oMs = new System.Management
            .ManagementScope(@"''" + host + @"'root'cimv2");
            oMs.Connect();
            manEWatch = new ManagementEventWatcher(oMs, new EventQuery("SELECT * FROM    __InstanceCreationEvent WITHIN 0.1 WHERE TargetInstance ISA 'Win32_PrintJob'"));

            manEWatch.EventArrived += new EventArrivedEventHandler(
            mewPrintJobs_EventArrived);
            manEWatch.Start();
        }
        static void mewPrintJobs_EventArrived(object sender, EventArrivedEventArgs e)
        {
            foreach (PropertyData prop in e.NewEvent.Properties)
            {
                string val = prop.Value == null ? "null" : prop.Value.ToString();
            }
            ManagementBaseObject printJob = (ManagementBaseObject)e.NewEvent.Properties["TargetInstance"].Value;
            string v = "";
            foreach (PropertyData propp in printJob.Properties)
            {
                string name = propp.Name;
                string val = propp.Value == null ? "null" : propp.Value.ToString();
                val += "'n";
                v += name + ":" + val;
            }
            PrintQueue printerSpooler = null;
            printerSpooler = new PrintQueue(new PrintServer(), "EPSON LQ-300+ /II ESC/P 2");
            PrintJobSettings printJobSetting = printerSpooler.CurrentJobSettings;
            string desc = printJobSetting.Description;

            //printerSpooler.CurrentJobSettings.CurrentPrintTicket
            Console.WriteLine("-------");
            Console.WriteLine(v);
        }
    }
}

如何在c#中使用PrintCapabilities类

我竟然找到了答案。如果你使用的是4.0,你也应该引用ReachFramework.dll,一旦你这样做,魔术确实发生了:)