/// <summary> /// Returns true if print was aborted. /// </summary> /// <remarks> /// If you have nested PrintControllers, this method won't get called on the inner one /// Add initialization code to StartPrint or StartPage instead. /// </remarks> private bool PrintLoop(PrintDocument document) { QueryPageSettingsEventArgs queryEvent = new QueryPageSettingsEventArgs((PageSettings)document.DefaultPageSettings.Clone()); while (true) { document.OnQueryPageSettings(queryEvent); if (queryEvent.Cancel) { return(true); } PrintPageEventArgs pageEvent = CreatePrintPageEvent(queryEvent.PageSettings); Graphics? graphics = OnStartPage(document, pageEvent); pageEvent.SetGraphics(graphics); try { document.OnPrintPage(pageEvent); OnEndPage(document, pageEvent); } finally { pageEvent.Dispose(); } if (pageEvent.Cancel) { return(true); } else if (!pageEvent.HasMorePages) { return(false); } } }
private bool PrintLoopOptimized(PrintDocument document) { PrintPageEventArgs? pageEvent = null; PageSettings documentPageSettings = (PageSettings)document.DefaultPageSettings.Clone(); QueryPageSettingsEventArgs queryEvent = new QueryPageSettingsEventArgs(documentPageSettings); while (true) { queryEvent.PageSettingsChanged = false; document.OnQueryPageSettings(queryEvent); if (queryEvent.Cancel) { return(true); } if (!queryEvent.PageSettingsChanged) { // QueryPageSettings event handler did not change the page settings, // thus we use default page settings from the document object. if (pageEvent == null) { pageEvent = CreatePrintPageEvent(queryEvent.PageSettings); } else { // This is not the first page and the settings had not changed since the previous page, // thus don't re-apply them. pageEvent.CopySettingsToDevMode = false; } Graphics?graphics = OnStartPage(document, pageEvent); pageEvent.SetGraphics(graphics); } else { // Page settings were customized, so use the customized ones in the start page event. pageEvent = CreatePrintPageEvent(queryEvent.PageSettings); Graphics?graphics = OnStartPage(document, pageEvent); pageEvent.SetGraphics(graphics); } try { document.OnPrintPage(pageEvent); OnEndPage(document, pageEvent); } finally { pageEvent.Graphics !.Dispose(); pageEvent.SetGraphics(null); } if (pageEvent.Cancel) { return(true); } else if (!pageEvent.HasMorePages) { return(false); } } }