Beispiel #1
0
        /// <summary>
        /// This is the event handler for PrintDocument.Paginate. It creates print preview pages for the app.
        /// </summary>
        /// <param name="sender">PrintDocument</param>
        /// <param name="e">Paginate Event Arguments</param>
        protected override void CreatePrintPreviewPages(object sender, PaginateEventArgs e)
        {
            base.CreatePrintPreviewPages(sender, e);

            PrintTaskOptionDetails      printDetailedOptions = PrintTaskOptionDetails.GetFromPrintTaskOptions(e.PrintTaskOptions);
            PrintPageRangeOptionDetails pageRangeOption      = (PrintPageRangeOptionDetails)printDetailedOptions.Options[StandardPrintTaskOptions.CustomPageRanges];

            // The number of pages may have been changed, so validate the Page Ranges again
            ValidatePageRangeOption(pageRangeOption);
        }
Beispiel #2
0
        /// <summary>
        /// Option change event handler
        /// </summary>
        /// <param name="sender">PrintTaskOptionsDetails object</param>
        /// <param name="args">the event arguments containing the changed option id</param>
        void printDetailedOptions_OptionChanged(PrintTaskOptionDetails sender, PrintTaskOptionChangedEventArgs args)
        {
            string optionId = args.OptionId as string;

            if (string.IsNullOrEmpty(optionId))
            {
                return;
            }

            // Handle change in Page Range Option
            if (optionId == StandardPrintTaskOptions.CustomPageRanges)
            {
                PrintPageRangeOptionDetails pageRangeOption = (PrintPageRangeOptionDetails)sender.Options[optionId];
                ValidatePageRangeOption(pageRangeOption);
            }
        }
Beispiel #3
0
        /// <summary>
        /// Deals with validating that the Page Ranges only contain pages that are present in the document.
        ///
        /// This is not necessary and some apps don't do this validation. Instead, they just ignore the pages
        /// that are not present in the document and simply don't print them.
        /// </summary>
        /// <param name="pageRangeOption">The PrintPageRangeOptionDetails option</param>
        void ValidatePageRangeOption(PrintPageRangeOptionDetails pageRangeOption)
        {
            IList <PrintPageRange> pageRanges = ((IList <PrintPageRange>)pageRangeOption.Value).ToImmutableList();

            pageRangeOption.WarningText = "";
            pageRangeOption.ErrorText   = "";

            // An empty list means AllPages, in which case we don't need to check the ranges
            if (pageRanges.Count > 0)
            {
                lock (printPreviewPages)
                {
                    // Verify that the page ranges contain at least one printable page
                    bool containsAtLeastOnePrintablePage = false;
                    foreach (PrintPageRange pageRange in pageRanges)
                    {
                        if ((pageRange.FirstPageNumber <= printPreviewPages.Count) || (pageRange.LastPageNumber <= printPreviewPages.Count))
                        {
                            containsAtLeastOnePrintablePage = true;
                            break;
                        }
                    }

                    if (containsAtLeastOnePrintablePage)
                    {
                        // Warn the user in case one of the page ranges contains pages that will not printed. That way, s/he
                        // can fix the page numbers in case they were mistyped.
                        foreach (PrintPageRange pageRange in pageRanges)
                        {
                            if ((pageRange.FirstPageNumber > printPreviewPages.Count) || (pageRange.LastPageNumber > printPreviewPages.Count))
                            {
                                pageRangeOption.WarningText = "One of the ranges contains pages that are not present in the document";
                                break;
                            }
                        }
                    }
                    else
                    {
                        pageRangeOption.ErrorText = "Those pages are not present in the document";
                    }
                }
            }
        }