Example #1
0
        /// <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);
                }
            }
        }
Example #2
0
        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);
                }
            }
        }