public WrapDocumentPaginator(FlowDocument flowDoc, BaseDocument baseDoc,
                              PageRangeSelection selection = PageRangeSelection.AllPages,
                              PageRange range = default(PageRange))
     : this(((IDocumentPaginatorSource)flowDoc).DocumentPaginator, baseDoc)
 {
     this.selection = selection;
     this.range     = range;
 }
        public WrapDocumentPaginator(DocumentPaginator paginator, BaseDocument document)
        {
            this.document  = document;
            this.paginator = paginator;

            //будь бдителен, это очистка кеша
            //DocumentPaginator содержит внутри себя кеш страниц которые он сформировал
            //но если мы сформируем два WrapDocumentPaginator то при попытке сформировать страницу будет ошибка
            //System.ArgumentException : Указанный элемент Visual уже является дочерним по отношению к другому элементу Visual или корневому элементу CompositionTarget.
            //эта ошибка вызвана тем что страница из кеша присваивается как дочерняя двум результирующим страницам
            //что бы этого избежать при создании очищаем кеш
            var size = paginator.PageSize;

            paginator.PageSize = new Size(0, 0);
            paginator.PageSize = size;

            pageSize = new Size(paginator.PageSize.Width + Margins.Right + Margins.Left,
                                paginator.PageSize.Height + Margins.Top + Margins.Bottom);
        }