コード例 #1
0
        public PrintingPaginator(DocumentPaginator originalPaginator, Size pageSize, Size pageMargin)
        {
            this._originalPaginator = originalPaginator;
            this._pageSize = pageSize;
            this._pageMargin = pageMargin;

            _originalPaginator.PageSize = new Size(
                _pageSize.Width - _pageMargin.Width * 2,
                _pageSize.Height - _pageMargin.Height * 2);
            _originalPaginator.ComputePageCount();
        }
コード例 #2
0
ファイル: XPSCreator.cs プロジェクト: adamnowak/SmartWorking
        //IDocumentPaginatorSource flowDocument,
        public static FixedDocument ConvertToFixedDocument(DocumentPaginator documentPaginator)
        {
            FixedDocument fixeddoc = new FixedDocument();

             // DocumentPaginator paginator = documentPaginator;
              if (!documentPaginator.IsPageCountValid)
            documentPaginator.ComputePageCount();

              int pageindex;
              for (pageindex = 0; pageindex < documentPaginator.PageCount; pageindex++)
              {
            Grid grid = new Grid();
            DocumentPageView pageView = new DocumentPageView();
            pageView.DocumentPaginator = documentPaginator;
            pageView.PageNumber = pageindex;

            grid.Children.Add(new Border()
            {
              BorderBrush = Brushes.Black,
              BorderThickness = new Thickness(1),
              HorizontalAlignment = HorizontalAlignment.Center,
              VerticalAlignment = VerticalAlignment.Center,
              Child = pageView
            });

            FixedPage fixedpage = new FixedPage();
            fixedpage.Width = documentPaginator.PageSize.Width;
            fixedpage.Height = documentPaginator.PageSize.Height;
            fixedpage.Children.Add(grid);

            PageContent pc = new PageContent();
            ((IAddChild)pc).AddChild(fixedpage);
            fixeddoc.Pages.Add(pc);
              }

              return fixeddoc;
        }
コード例 #3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="DocumentPaginatorEx" /> class.
        /// </summary>
        /// <param name="document">The document.</param>
        /// <param name="printableArea">The printable area size.</param>
        /// <param name="range">The print page range.</param>
        public DocumentPaginatorEx(FlowDocument document, Size printableArea, PageRange range)
        {
            // Clone the source document's content into a new FlowDocument.
            // This is because the pagination for the printer needs to be
            // done differently than the pagination for the displayed page.
            // We print the copy, rather that the original FlowDocument.
            var stream = new MemoryStream();
            var source = new TextRange(document.ContentStart, document.ContentEnd);
            source.Save(stream, DataFormats.Xaml);
            var documentCopy = new FlowDocument();
            var dest = new TextRange(documentCopy.ContentStart, documentCopy.ContentEnd);
            dest.Load(stream, DataFormats.Xaml);

            // Ready to go on the copy of the document
            var paginatorSource = documentCopy as IDocumentPaginatorSource;
            _flowDocumentPaginator = paginatorSource.DocumentPaginator;
            CurrentPage = 0;

            TotalPrintableArea = printableArea;
            var height = printableArea.Height;
            var width = printableArea.Width;

            var docEx = document as FlowDocumentEx;
            if (docEx != null)
            {
                width -= (docEx.PrintMargin.Left + docEx.PrintMargin.Right);
                height -= (docEx.PrintMargin.Top + docEx.PrintMargin.Bottom);
                DocumentPrintMargin = docEx.PrintMargin;
                OriginalPrintMargin = docEx.PrintMargin;

                Watermark = docEx.PrintWatermark;
                if (Watermark != null)
                {
                    Watermark.Resources = document.Resources;
                    Watermark.DataContext = document.DataContext;
                    Watermark.Measure(printableArea);
                    Watermark.Arrange(new Rect(0,0, Watermark.DesiredSize.Width, Watermark.DesiredSize.Height));
                }

                Header = docEx.PageHeader;
                if (Header != null)
                {
                    Header.Resources = document.Resources;
                    Header.DataContext = document.DataContext;
                    Header.Width = width;
                    Header.Measure(new Size(width, double.PositiveInfinity));
                    Header.Height = Header.DesiredSize.Height; // These two lines attempt to fix the size as desired and make sure it is properly measured at that
                    Header.Measure(new Size(width, Header.DesiredSize.Height));
                    Header.Arrange(new Rect(0,0, Header.DesiredSize.Width, Header.DesiredSize.Height));
                    height -= Header.DesiredSize.Height;
                    DocumentPrintMargin = new Thickness(DocumentPrintMargin.Left, DocumentPrintMargin.Top + Header.DesiredSize.Height, DocumentPrintMargin.Right, DocumentPrintMargin.Bottom);
                }

                Footer = docEx.PageFooter;
                if (Footer != null)
                {
                    Footer.Resources = document.Resources;
                    Footer.DataContext = document.DataContext;
                    Footer.Width = width;
                    Footer.Measure(new Size(width, double.PositiveInfinity));
                    Footer.Height = Footer.DesiredSize.Height; // These two lines attempt to fix the size as desired and make sure it is properly measured at that
                    Footer.Measure(new Size(width, Footer.DesiredSize.Height));
                    Footer.Arrange(new Rect(0, 0, Footer.DesiredSize.Width, Footer.DesiredSize.Height));
                    height -= Footer.DesiredSize.Height;
                    DocumentPrintMargin = new Thickness(DocumentPrintMargin.Left, DocumentPrintMargin.Top, DocumentPrintMargin.Right, DocumentPrintMargin.Bottom + Footer.DesiredSize.Height);
                }
            }
            else
                DocumentPrintMargin = new Thickness();

            _flowDocumentPaginator.PageSize = new Size(width, height);
            _flowDocumentPaginator.ComputePageCount();
            TotalPages = _flowDocumentPaginator.PageCount;

            Range = range;
        }