public CloudPrinterImpl(PrintQueue queue)
        {
            PrintTicket defaults = queue.DefaultPrintTicket.Clone();
            defaults.OutputColor = OutputColor.Monochrome;
            defaults.PageMediaSize = new PageMediaSize(PageMediaSizeName.ISOA4);

            this.Name = queue.FullName;
            this.Description = queue.Description;
            this.Capabilities = XDocument.Load(queue.GetPrintCapabilitiesAsXml()).ToString();
            this.Defaults = new StreamReader(defaults.GetXmlStream(), Encoding.UTF8, false).ReadToEnd();
            this.CapsHash = GetMD5Hash(Encoding.UTF8.GetBytes(Capabilities));

            PrinterConfigurationSection printerconfigs = Config.PrinterConfigurationSection;

            if (printerconfigs != null)
            {
                this.PrinterConfiguration = printerconfigs.Printers.OfType<PrinterConfiguration>().SingleOrDefault(p => p.Name == this.Name);

                if (this.PrinterConfiguration != null)
                {
                    this.JobPrinterType = AppDomain.CurrentDomain.GetAssemblies().SelectMany(a => a.GetTypes().Where(t => t.Name == this.PrinterConfiguration.JobPrinter && typeof(JobPrinter).IsAssignableFrom(t))).SingleOrDefault();
                }
                else
                {
                    this.JobPrinterType = AppDomain.CurrentDomain.GetAssemblies().SelectMany(a => a.GetTypes().Where(t => t.Name == printerconfigs.DefaultJobPrinter && typeof(JobPrinter).IsAssignableFrom(t))).SingleOrDefault();
                }
            }

            if (this.JobPrinterType == null)
            {
                this.JobPrinterType = PrinterConfiguration.DefaultJobPrinterType;
            }
        }
Esempio n. 2
0
        public CloudPrinterImpl(PrintQueue queue)
        {
            PrintTicket defaults = queue.DefaultPrintTicket.Clone();

            defaults.OutputColor   = OutputColor.Monochrome;
            defaults.PageMediaSize = new PageMediaSize(PageMediaSizeName.ISOA4);

            this.Name         = queue.FullName;
            this.Description  = queue.Description;
            this.Capabilities = XDocument.Load(queue.GetPrintCapabilitiesAsXml()).ToString();
            this.Defaults     = new StreamReader(defaults.GetXmlStream(), Encoding.UTF8, false).ReadToEnd();
            this.CapsHash     = GetMD5Hash(Encoding.UTF8.GetBytes(Capabilities));

            PrinterConfigurationSection printerconfigs = Config.PrinterConfigurationSection;

            if (printerconfigs != null)
            {
                this.PrinterConfiguration = printerconfigs.Printers.OfType <PrinterConfiguration>().SingleOrDefault(p => p.Name == this.Name);

                if (this.PrinterConfiguration != null)
                {
                    this.JobPrinterType = AppDomain.CurrentDomain.GetAssemblies().SelectMany(a => a.GetTypes().Where(t => t.Name == this.PrinterConfiguration.JobPrinter && typeof(JobPrinter).IsAssignableFrom(t))).SingleOrDefault();
                }
                else
                {
                    this.JobPrinterType = AppDomain.CurrentDomain.GetAssemblies().SelectMany(a => a.GetTypes().Where(t => t.Name == printerconfigs.DefaultJobPrinter && typeof(JobPrinter).IsAssignableFrom(t))).SingleOrDefault();
                }
            }

            if (this.JobPrinterType == null)
            {
                this.JobPrinterType = PrinterConfiguration.DefaultJobPrinterType;
            }
        }
        /// <summary>
        /// Reads print queue configuration xml to retrieve the current list of input bins.
        /// </summary>
        /// <param name="printQueue">The print queue to query.</param>
        /// <returns></returns>
        public static Dictionary <string, string> GetInputBins(PrintQueue printQueue)
        {
            Dictionary <string, string> inputBins = new Dictionary <string, string>();

            // Get the print queue PrintCapabilities.
            XmlDocument xmlDoc = null;

            using (MemoryStream stream = printQueue.GetPrintCapabilitiesAsXml())
            {
                // Read the JobInputBins out of the PrintCapabilities.
                xmlDoc = new XmlDocument();
                xmlDoc.Load(stream);
            }

            // Create NamespaceManager and add PrintSchemaFrameWork-Namespace (should be on DocumentElement of the PrintTicket).
            // Prefix: psf NameSpace: xmlDoc.DocumentElement.NamespaceURI = "http://schemas.microsoft.com/windows/2003/08/printing/printschemaframework"
            XmlNamespaceManager manager = new XmlNamespaceManager(xmlDoc.NameTable);

            manager.AddNamespace(xmlDoc.DocumentElement.Prefix, xmlDoc.DocumentElement.NamespaceURI);

            // Select all job input bins.
            XmlNodeList nodeList = xmlDoc.SelectNodes("//psf:Feature[@name='psk:JobInputBin']/psf:Option/psf:Property", manager);

            // Load the Dictionary with the bin values and names. The names will be used to modify the print ticket if necessary.
            foreach (XmlNode node in nodeList)
            {
                inputBins.Add(node.LastChild.InnerText, node.ParentNode.Attributes[0].Value);
            }

            return(inputBins);
        }
        private static string GetCapabilitiesFromPrintQueue(PrintQueue pq)
        {
            string cap = null;

            using (var ms = pq.GetPrintCapabilitiesAsXml())
                using (var sr = new StreamReader(ms))
                {
                    cap = sr.ReadToEnd();
                }
            return(cap);
        }
Esempio n. 5
0
        public static Dictionary<string, string> GetInputBins(PrintQueue printQueue)
        {
            var inputBins = new Dictionary<string, string>();

            var printerCapXmlStream = printQueue.GetPrintCapabilitiesAsXml();

            var xmlDoc = new XmlDocument();
            xmlDoc.Load(printerCapXmlStream);

            var manager = new XmlNamespaceManager(xmlDoc.NameTable);
            manager.AddNamespace(xmlDoc.DocumentElement.Prefix, xmlDoc.DocumentElement.NamespaceURI);

            var nodeList = xmlDoc.SelectNodes("//psf:Feature[@name='psk:JobInputBin']/psf:Option", manager);

            foreach (XmlNode node in nodeList)
            {
                inputBins.Add(node.LastChild.InnerText, node.Attributes["name"].Value);
            }

            return inputBins;
        }
Esempio n. 6
0
        public static Dictionary <string, string> GetInputBins(PrintQueue printQueue)
        {
            var inputBins = new Dictionary <string, string>();

            var printerCapXmlStream = printQueue.GetPrintCapabilitiesAsXml();

            var xmlDoc = new XmlDocument();

            xmlDoc.Load(printerCapXmlStream);

            var manager = new XmlNamespaceManager(xmlDoc.NameTable);

            manager.AddNamespace(xmlDoc.DocumentElement.Prefix, xmlDoc.DocumentElement.NamespaceURI);

            var nodeList = xmlDoc.SelectNodes("//psf:Feature[@name='psk:JobInputBin']/psf:Option", manager);

            foreach (XmlNode node in nodeList)
            {
                inputBins.Add(node.LastChild.InnerText, node.Attributes["name"].Value);
            }

            return(inputBins);
        }
Esempio n. 7
0
        public static XDocument GetPrintCapabilitiesAsXDocument([NotNull] this PrintQueue printQueue)
        {
            if (printQueue == null)
            {
                throw new ArgumentNullException(nameof(printQueue));
            }

            XDocument result;

            try
            {
                using (var memoryStream = printQueue.GetPrintCapabilitiesAsXml())
                {
                    result = XDocument.Load(memoryStream);
                }
            }
            catch (PrintQueueException printQueueException)
            {
                throw new InvalidOperationException("Failed to get print capabilities",
                                                    printQueueException);
            }

            return(result);
        }