///<summary>Called from many places in the program. Every single time we print, this function is used to figure out which printer to use. ///It also handles displaying the dialog if necessary. Tests to see if the selected printer is valid, and if not, then it gives user the ///option to print to an available printer. PatNum and AuditDescription used to make audit log entry. PatNum can be 0. Audit Log Text will ///show AuditDescription exactly.</summary> public static bool SetPrinter(PrintDocument pd, PrintSituation sit, long patNum, string auditDescription) { PrinterSettings pSet = pd.PrinterSettings; //pSet will always be new when this function is called //0.5. Get the name of the Windows default printer. //This method only works when the pSet is still new. //string winDefault=pSet.PrinterName; //1. If a default printer is set in OD, //and it is in the list of installed printers, use it. if (pSet.PrinterName == null) { MessageBox.Show("Error: " + "\r\nYou may not have a printer installed\r\n" + "If you do have a printer installed, restarting the workstation may resolve the problem." ); return(false); } bool doPrompt = false; Printer printerForSit = Printers.GetForSit(PrintSituation.Default); //warning: this changes string printerName = ""; if (printerForSit != null) { printerName = printerForSit.PrinterName; doPrompt = printerForSit.DisplayPrompt; if (Printers.PrinterIsInstalled(printerName)) { pSet.PrinterName = printerName; } } //2. If a printer is set for this situation, //and it is in the list of installed printers, use it. if (sit != PrintSituation.Default) { printerForSit = Printers.GetForSit(sit); printerName = ""; if (printerForSit != null) { printerName = printerForSit.PrinterName; doPrompt = printerForSit.DisplayPrompt; if (Printers.PrinterIsInstalled(printerName)) { pSet.PrinterName = printerName; } } } //4. Present the dialog if (!doPrompt) { //Create audit log entry for printing. PatNum can be 0. SecurityLogs.MakeLogEntry(Permissions.Printing, patNum, auditDescription); return(true); } PrintDialog dialog = new PrintDialog(); //pSet.Collate is true here dialog.AllowSomePages = true; dialog.PrinterSettings = pSet; dialog.UseEXDialog = true; #if DEBUG //just use defaults #else DialogResult result = dialog.ShowDialog(); //but dialog.PrinterSettings.Collate is false here. I don't know what triggers the change. pSet.Collate = true; //force it back to true. if (result != DialogResult.OK) { return(false); } //if(!dialog.PrinterSettings.IsValid){//not needed since we have already checked each name. //pd2.PrinterSettings=printDialog2.PrinterSettings; //} #endif //Create audit log entry for printing. PatNum can be 0. SecurityLogs.MakeLogEntry(Permissions.Printing, patNum, auditDescription); return(true); }
private static bool SetPrinter(PrinterSettings pSet, PrintSituation printSit, long patNum, string auditDescription) { #region 1 - Set default printer if available from this computer. //pSet will always be new when this function is called. //Get the name of the Windows default printer. //This method only works when the pSet is still new. //string winDefault=pSet.PrinterName; //1. If a default printer is set in OD, //and it is in the list of installed printers, use it. bool doPrompt = false; Printer printerForSit = Printers.GetForSit(PrintSituation.Default); //warning: this changes string printerName = ""; if (printerForSit != null) { printerName = printerForSit.PrinterName; doPrompt = printerForSit.DisplayPrompt; if (Printers.PrinterIsInstalled(printerName)) { pSet.PrinterName = printerName; } } #endregion 1 #region 2 - If a printer is set for this situation, and it is in the list of installed printers, use it. if (printSit != PrintSituation.Default) { printerForSit = Printers.GetForSit(printSit); printerName = ""; if (printerForSit != null) { printerName = printerForSit.PrinterName; doPrompt = printerForSit.DisplayPrompt; if (Printers.PrinterIsInstalled(printerName)) { pSet.PrinterName = printerName; } } } #endregion 2 #region 3 - Present the dialog if (doPrompt) { PrintDialog dialog = new PrintDialog(); dialog.AllowSomePages = true; dialog.PrinterSettings = pSet; dialog.UseEXDialog = true; DialogResult result = dialog.ShowDialog(); pSet.Collate = true; if (result != DialogResult.OK) { return(false); } if (pSet.PrintRange != PrintRange.AllPages && pSet.ToPage < 1) { //User set the range to not print any pages. return(false); } } #endregion 3 //Create audit log entry for printing. PatNum can be 0. if (!string.IsNullOrEmpty(auditDescription)) { SecurityLogs.MakeLogEntry(Permissions.Printing, patNum, auditDescription); } return(true); }
///<summary>Called from many places in the program. Every single time we print, this function is used to figure out which printer to use. It also handles displaying the dialog if necessary. Tests to see if the selected printer is valid, and if not, then it gives user the option to print to an available printer.</summary> public static bool SetPrinter(PrintDocument pd, PrintSituation sit) { PrinterSettings pSet = pd.PrinterSettings; //pSet will always be new when this function is called //0.5. Get the name of the Windows default printer. //This method only works when the pSet is still new. //string winDefault=pSet.PrinterName; //1. If a default printer is set in OD, //and it is in the list of installed printers, use it. bool doPrompt = false; Printer printerForSit = Printers.GetForSit(PrintSituation.Default); //warning: this changes string printerName = ""; if (printerForSit != null) { printerName = printerForSit.PrinterName; doPrompt = printerForSit.DisplayPrompt; if (Printers.PrinterIsInstalled(printerName)) { pSet.PrinterName = printerName; } } //2. If a printer is set for this situation, //and it is in the list of installed printers, use it. if (sit != PrintSituation.Default) { printerForSit = Printers.GetForSit(sit); printerName = ""; if (printerForSit != null) { printerName = printerForSit.PrinterName; doPrompt = printerForSit.DisplayPrompt; if (Printers.PrinterIsInstalled(printerName)) { pSet.PrinterName = printerName; } } } //4. Present the dialog if (!doPrompt) { return(true); } PrintDialog dialog = new PrintDialog(); //pSet.Collate is true here dialog.PrinterSettings = pSet; dialog.UseEXDialog = true; #if DEBUG return(true); #else DialogResult result = dialog.ShowDialog(); //but dialog.PrinterSettings.Collate is false here. I don't know what triggers the change. pSet.Collate = true; //force it back to true. if (result != DialogResult.OK) { return(false); } //if(!dialog.PrinterSettings.IsValid){//not needed since we have already checked each name. //pd2.PrinterSettings=printDialog2.PrinterSettings; //} return(true); #endif }