dotnetpro.WPF.TableReport.ReportPresenter.GenerateFixedDocument C# (CSharp) Method

GenerateFixedDocument() public method

public GenerateFixedDocument ( bool InPrintMode ) : void
InPrintMode bool
return void
        public void GenerateFixedDocument(bool InPrintMode)
        {
            PrintDocument = new FixedDocument();
            
            int RowsOnPage = 100;
            PageSupplemental oSupplemental = new PageSupplemental(Configuration);
            PageDefinition def = definition;

            //Verteilung auf mehreren Seiten?
            GenerateRanges();

            int RowsOnFirstPage = CalculateRowsOnPage(ref RowsOnPage, def);

            UpdatePages();

            int from = PageSelectionFrom;
            int until = PageSelectionUntil;

            if (AllPages | !InPrintMode)
            { from = 1; until = maxPages; }

            ProgressContext.Init(Properties.Resources.prgSeiten, (until - from + 1));

            PrintDocument.DocumentPaginator.PageSize = def.PageSize;

            for (int i = from; i <= until; i++)
            {
                for (int x = 1; x <= ColRanges.Count; x++)
                {
                    oTable = new Grid();
                    oTable.BeginInit();

                    ProgressContext.UpdateProgress(i - from + x);
                    if (ProgressContext.Canceled)
                    {
                        ProgressContext.Finish();
                        return;
                    }
                    offset = x - 1;
                    PageContent oPage = new PageContent();
                    FixedPage oFixed = CreatePage();

                    int RowsUntil = Math.Min((i - 1) * RowsOnPage + RowsOnFirstPage, oData.Rows.Count);
                    int RowsFrom = (i - 2) * RowsOnPage + RowsOnFirstPage;
                    if (RowsFrom < 0)
                        RowsFrom = 0;
                    GenerateRows(RowsFrom, RowsUntil);

                    oTable.Width = def.ContentSize.Width;
                    oTable.Margin = new Thickness(def.ContentOrigin.X, def.ContentOrigin.Y, 0, 0);
                    oTable.EndInit();
                    oFixed.Children.Add(oTable);

                    FrameworkElement oHeader = oSupplemental.PageHeader();
                    oHeader.Width = def.ContentSize.Width;
                    oHeader.Margin = new Thickness(def.HeaderRect.Left, def.HeaderRect.Top, 0, 0);
                    oFixed.Children.Add(oHeader);

                    string currentpage = Convert.ToString(((int)i));
                    if (ColRanges.Count > 1)
                        currentpage = currentpage.AddLetter(x);

                    FrameworkElement oFooter = oSupplemental.PageFooter(currentpage, Maximum);
                    oFooter.Margin = new Thickness(def.FooterRect.Left, def.FooterRect.Top, 0, 0);
                    oFooter.Width = def.ContentSize.Width;
                    oFixed.Children.Add(oFooter);

                    oFixed.Measure(def.PageSize);
                    oFixed.Arrange(new Rect(new Point(), def.PageSize));
                    oFixed.UpdateLayout();

                    ((IAddChild)oPage).AddChild(oFixed);
                    PrintDocument.Pages.Add(oPage);
                }
            }
            ticket.PageBorderless = PageBorderless.Borderless;
            oTable = null;
            ProgressContext.Finish();

            NotifyPropertyChanged("PrintDocument");
            NotifyPropertyChanged("Maximum");
            NotifyPropertyChanged("PageSelectionFrom");
            NotifyPropertyChanged("PageSelectionUntil");

        }