コード例 #1
0
ファイル: CommonXpsPrinter.cs プロジェクト: heinzsack/DEV
        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;
            }
コード例 #2
0
ファイル: CommonXpsPrinter.cs プロジェクト: heinzsack/DEV
        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;
            }