/// <summary> /// Gets the default page settings object if there is any exception condition /// </summary> /// <param name="pageSettingString">The page settings string object</param> /// <returns>Returns the page settings object</returns> private PageSettings GetDefaultPageSettings(string pageSettingString) { // this should not be the case ever, still puttinga safety net, so that printing doesn't stop and it prints to // default printer. if (string.IsNullOrEmpty(pageSettingString)) { throw new ArgumentNullException(Resources.PageSettingsNotNull); } PageSettings pageSettingsOfPrinter = null; // Xml Document holding the page settings user has set var textReader = new StringReader(pageSettingString); var readerSettings = new XmlReaderSettings { DtdProcessing = DtdProcessing.Prohibit, XmlResolver = null }; using (XmlReader xmlReader = XmlReader.Create(textReader, readerSettings)) { var pageSettingSetByUser = new XmlDocument { XmlResolver = null }; pageSettingSetByUser.Load(xmlReader); var pageSettingsRootNode = pageSettingSetByUser.DocumentElement; pageSettingsOfPrinter = new PageSettings(); var printerName = PageSettingsHelper.GetPrinterNameFromPageSettings(pageSettingsRootNode); if (string.IsNullOrEmpty(printerName)) { throw new ArgumentException(Resources.PrinterNameMustNotBeNull); } pageSettingsOfPrinter.PrinterSettings.PrinterName = printerName; this.SetDefaultPageSettings(pageSettingsOfPrinter, pageSettingsRootNode); } return(pageSettingsOfPrinter); }
internal static string PrinterNameFromPageSettings(string pageSettings) { if (string.IsNullOrWhiteSpace(pageSettings)) { return(null); } var value = string.Empty; TextReader textReader = null; try { textReader = new StringReader(pageSettings); var readerSettings = new XmlReaderSettings() { DtdProcessing = DtdProcessing.Prohibit, XmlResolver = null }; using (var xmlReader = XmlReader.Create(textReader, readerSettings)) { var doc = new XmlDocument { XmlResolver = null }; doc.Load(xmlReader); value = PageSettingsHelper.GetPrinterNameFromPageSettings(doc.DocumentElement); } } finally { if (textReader != null) { textReader.Dispose(); } } return(value); }
private PageSettings ProcessPageSettingsInternal(string pageSettingString) { if (string.IsNullOrEmpty(pageSettingString)) { throw new ArgumentNullException("PageSettings set by user cannot be empty"); } PageSettings pageSettingsOfPrinter = null; TextReader textReader = null; try { // Xml Document holding the page settings user has set textReader = new StringReader(pageSettingString); var readerSettings = new XmlReaderSettings { DtdProcessing = DtdProcessing.Prohibit, XmlResolver = null }; using (var xmlReader = XmlReader.Create(textReader, readerSettings)) { XmlDocument pageSettingSetByUser = new XmlDocument { XmlResolver = null }; pageSettingSetByUser.Load(xmlReader); var pageSettingsRootNode = pageSettingSetByUser.DocumentElement; // Gets the non empty nodes, i.e. nodes which actually user has set a value var nonEmptyNodes = this.GetNonEmptyNodes(pageSettingsRootNode); // Gets the printer name from the same xml. If printer name is not set or not valid , no need to go further var printerName = PageSettingsHelper.GetPrinterNameFromPageSettings(pageSettingsRootNode); if (string.IsNullOrWhiteSpace(printerName)) { throw new ArgumentNullException(Resources.NoPrinterName); } // Get the default page settings of the printer and sets the printer name and orientation pageSettingsOfPrinter = new PageSettings(); pageSettingsOfPrinter.PrinterSettings.PrintFileName = Constants.Empty; pageSettingsOfPrinter.PrinterSettings.PrinterName = printerName; pageSettingsOfPrinter.Landscape = this.IsLandscape(pageSettingsRootNode); // serialize the pagesettings var pageSettingsStringForPrinter = this.GetSerializedPageSettingsOfPrinter(pageSettingsOfPrinter); if (string.IsNullOrEmpty(pageSettingsStringForPrinter)) { throw new ArgumentNullException("PageSettings set by user cannot be empty"); } // Copy the pageSettings from user set to one sent to printer var pageSettingsTobeSet = this.TransferPageSettingsSetByUserToPrinter(pageSettingsStringForPrinter, nonEmptyNodes); // finally deserialize it and give it back pageSettingsOfPrinter = (PageSettings)XmlHelper.XmlDeserialize(typeof(PageSettings), pageSettingsTobeSet, string.Empty); if (pageSettingsOfPrinter == null) { throw new ArgumentNullException(Resources.NoPageSettings); } } } finally { if (textReader != null) { textReader.Dispose(); } } return(pageSettingsOfPrinter); }