private static int CreatePages(DefinitionsForPrintWithXAMLControls XAMLDefinitionsForOnePage, FixedDocument PageDocumentToPrint, double MaxOHeight, List<Object> printCollection, ObservableCollection<object> PageCollection, String HeadLineText, int NumberOfPages = 0) { int CountedNumberOfPages = 0; double RemainingHeight = 0; List<CommonPageFooter> CreatetedFooterPages = new List<CommonPageFooter>(); PageCollection.Add(new CommonPageHeader() { HeadLineText = HeadLineText }); foreach (object ControlToPrint in printCollection) { PageCollection.Add(ControlToPrint); XAMLDefinitionsForOnePage.Measure(new Size(PAPER_SIZE_WIDTH, PAPER_SIZE_HEIGHT)); XAMLDefinitionsForOnePage.Arrange(new Rect(new Point(), new Size(PAPER_SIZE_WIDTH, PAPER_SIZE_HEIGHT))); XAMLDefinitionsForOnePage.UpdateLayout(); double width = XAMLDefinitionsForOnePage.DesiredSize.Width; double height = XAMLDefinitionsForOnePage.DesiredSize.Height; RemainingHeight = MaxOHeight - height; if (height > MaxOHeight) { PageCollection.Remove(ControlToPrint); CreatetedFooterPages.Add(new CommonPageFooter()); PageCollection.Add(CreatetedFooterPages.Last()); XAMLDefinitionsForOnePage = GenerateNewContent(PageDocumentToPrint); PageCollection = XAMLDefinitionsForOnePage.GlobalContainer.ItemsSource as ObservableCollection<object>; PageCollection.Add(new CommonPageHeader() { HeadLineText = HeadLineText}); PageCollection.Add(ControlToPrint); XAMLDefinitionsForOnePage.Measure(new Size(PAPER_SIZE_WIDTH, PAPER_SIZE_HEIGHT)); XAMLDefinitionsForOnePage.Arrange(new Rect(new Point(), new Size(PAPER_SIZE_WIDTH, PAPER_SIZE_HEIGHT))); XAMLDefinitionsForOnePage.UpdateLayout(); CountedNumberOfPages++; } } CreatetedFooterPages.Add(new CommonPageFooter() { DistanceToLastLineValue = RemainingHeight - 20}); PageCollection.Add(CreatetedFooterPages.Last()); CountedNumberOfPages++; int WorkingPageNumber = 0; foreach (CommonPageFooter Footer in CreatetedFooterPages) { Footer.NumberOfPages = CountedNumberOfPages; Footer.PageNumber = ++WorkingPageNumber; } foreach (PageContent Page in PageDocumentToPrint.Pages) { Page.Measure(new Size(PAPER_SIZE_WIDTH, PAPER_SIZE_HEIGHT)); Page.Arrange(new Rect(new Point(), new Size(PAPER_SIZE_WIDTH, PAPER_SIZE_HEIGHT))); Page.UpdateLayout(); } return CountedNumberOfPages; }
public static DefinitionsForPrintWithXAMLControls GenerateNewContent(FixedDocument fixedDocument) { DefinitionsForPrintWithXAMLControls XAMLDefinitionsForOnePage = new DefinitionsForPrintWithXAMLControls(); XAMLDefinitionsForOnePage.GlobalContainer.ItemsSource = new ObservableCollection<object>(); PageContent page; FixedPage fixedPage; page = new PageContent(); FixedPage.SetTop(XAMLDefinitionsForOnePage, TOP_MARGIN); FixedPage.SetLeft(XAMLDefinitionsForOnePage, SIDE_MARGIN); FixedPage.SetRight(XAMLDefinitionsForOnePage, SIDE_MARGIN); fixedPage = GeneratePage(); fixedPage.Children.Add(XAMLDefinitionsForOnePage); fixedPage.VerticalAlignment = VerticalAlignment.Stretch; fixedDocument.Pages.Add(page); ((IAddChild)page).AddChild(fixedPage); return XAMLDefinitionsForOnePage; }