示例#1
0
    private DrawingVisual LayoutHeadingAndNumber(int pageNumber, string Heading, int fontSize, System.Windows.Media.Brush brush)
    {
        DrawingVisual title = new DrawingVisual();

        using (DrawingContext titleContext = title.RenderOpen())
        {
            TextPreformats text3 = GetPageNumbers(pageNumber);
            //TODO this must be parameterised, HARD CODED DEMO ONLY

            TextPreformats headingDemo = new TextPreformats(Heading, fontSize, brush);
            TextPreformats footerTitle = new TextPreformats(System.DateTime.Today, 14, System.Windows.Media.Brushes.Green);

            Rect contentBox = _paginator.GetPage(pageNumber).ContentBox;

            PlaceHeadingFooting(headingDemo, contentBox, Positions.Topleft, titleContext);
            if (text3.textHeight < _footerSize + 2)
            {
                PlaceHeadingFooting(text3, contentBox, Positions.BottomRight, titleContext);
            }

            PlaceHeadingFooting(text3, contentBox, Positions.Topright, titleContext);
            if (text3.textHeight < _footerSize + 2)
            {
                PlaceHeadingFooting(footerTitle, contentBox, Positions.Bottomleft, titleContext);
            }
        }

        return(title);
    }
        /// <summary>
        /// 下一个页面
        /// </summary>
        public void NextPage()
        {
            CurrentPageIndex++;

            var documentPage = _paginator.GetPage(CurrentPageIndex);

            OnPageChanged(documentPage);
        }
        public override DocumentPage GetPage(int pageNumber)
        {
            //что бы paginator.PageCount вернул корректное значение нужно сформировать все страницы
            if (!paginator.IsPageCountValid)
            {
                var totalPages = 0;
                while (paginator.GetPage(totalPages++) != DocumentPage.Missing)
                {
                }
            }
            if (selection == PageRangeSelection.UserPages)
            {
                pageNumber = pageNumber + Math.Min(range.PageFrom, paginator.PageCount) - 1;
            }

            var originalVisual = paginator.GetPage(pageNumber).Visual;

            var visual     = new ContainerVisual();
            var pageVisual = new ContainerVisual {
                Transform = new TranslateTransform(
                    Margins.Left,
                    Margins.Top)
            };

            pageVisual.Children.Add(originalVisual);
            visual.Children.Add(pageVisual);

            var header = Header(pageNumber);

            if (header != null)
            {
                var headerContainer = new ContainerVisual {
                    Transform = new TranslateTransform(Margins.Left, 0)
                };
                headerContainer.Children.Add(header);
                visual.Children.Add(headerContainer);
            }

            var footer = Footer(pageNumber);

            if (footer != null)
            {
                var footerContainer = new ContainerVisual {
                    Transform = new TranslateTransform(Margins.Left, PageSize.Height - Margins.Bottom)
                };
                footerContainer.Children.Add(footer);
                visual.Children.Add(footerContainer);
            }

            var documentPage = new DocumentPage(visual,
                                                pageSize,
                                                new Rect(new Point(), pageSize),
                                                new Rect(new Point(Margins.Left, Margins.Top), ContentSize()));

            return(documentPage);
        }
示例#4
0
        public override DocumentPage GetPage(int pageNumber)
        {
            // Get the requested page.
            DocumentPage page = flowDocumentPaginator.GetPage(pageNumber);

            // Wrap the page in a Visual. You can then add a transformation and extras.
            ContainerVisual newVisual = new ContainerVisual();

            newVisual.Children.Add(page.Visual);

            // Create a header.
            DrawingVisual header = new DrawingVisual();

            using (DrawingContext context = header.RenderOpen())
            {
                Typeface      typeface = new Typeface("Times New Roman");
                FormattedText text     = new FormattedText("Page " + (pageNumber + 1).ToString(),
                                                           CultureInfo.CurrentCulture, FlowDirection.LeftToRight,
                                                           typeface, 14, Brushes.Black);

                // Leave a quarter-inch of space between the page edge and this text.
                context.DrawText(text, new Point(96 * 0.25, 96 * 0.25));
            }
            // Add the title to the visual.
            newVisual.Children.Add(header);

            // Wrap the visual in a new page.
            DocumentPage newPage = new DocumentPage(newVisual);

            return(newPage);
        }
示例#5
0
        public override DocumentPage GetPage(int pageNumber)
        {
            DocumentPaginator dpg = keepFixedDoc.DocumentPaginator;
            DocumentPage      dp  = dpg.GetPage(pageNumber);

            return(dp);
        }
示例#6
0
        public override DocumentPage GetPage(int pageNumber)
        {
            var    page         = _paginator.GetPage(pageNumber);
            Visual originalPage = page.Visual;

            var visual = new ContainerVisual();

            doc.DataSource.PageNumber = pageNumber + 1;

            var headerVisual = GetHeaderFooterVisualFromDataTemplate(doc.Header, _definition.HeaderRect);
            var footerVisual = GetHeaderFooterVisualFromDataTemplate(doc.Footer, _definition.FooterRect);

            headerVisual.Offset = new Vector(_definition.HeaderRect.X, _definition.HeaderRect.Y);
            footerVisual.Offset = new Vector(_definition.FooterRect.X, _definition.FooterRect.Y);

            visual.Children.Add(headerVisual);
            visual.Children.Add(footerVisual);

            var pageVisual = new ContainerVisual()
            {
                Transform = new TranslateTransform(_definition.ContentOrigin.X, _definition.ContentOrigin.Y),
            };

            pageVisual.Children.Add(originalPage);
            visual.Children.Add(pageVisual);

            return(new DocumentPage(visual, _definition.PageSize, new Rect(new Point(), _definition.ContentSize), new Rect(_definition.ContentOrigin, _definition.PageSize)));
        }
示例#7
0
        /// <summary>МЕТОД Разбиваем документ на страницы</summary>
        /// <param name="pPageNumber">Номер страницы</param>
        public override DocumentPage GetPage(int pPageNumber)
        {
            // Размер странцы (максимальный, всё равно усекается отступами)
            PageSize = new Size(794, 1130);
            // Извлекаем запрашиваемую страницу
            DocumentPage _Page = PRI_DocPag.GetPage(pPageNumber + PRI_StartIndex);

            // Этот кусок исправляет ошибку печати с диапазоном, на некоторых принтерах
            // Create a new ContainerVisual as a new parent for page children
            var _Container = new ContainerVisual();

            if (_Page.Visual is FixedPage)
            {
                foreach (var _Сhild in ((FixedPage)_Page.Visual).Children)
                {
                    // Make a shallow clone of the child using reflection
                    var _СhildClone = (UIElement)_Сhild.GetType().GetMethod("MemberwiseClone", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(_Сhild, null);

                    // Setting the parent of the cloned child to the created ContainerVisual by using Reflection.
                    // WARNING: If we use Add and Remove methods on the FixedPage.Children, for some reason it will
                    //          throw an exception concerning event handlers after the printing job has finished.
                    var _ParentField = _СhildClone.GetType().GetField("_parent", BindingFlags.Instance | BindingFlags.NonPublic);
                    if (_ParentField != null)
                    {
                        _ParentField.SetValue(_СhildClone, null);
                        _Container.Children.Add(_СhildClone);
                    }
                }
                return(new DocumentPage(_Container, _Page.Size, _Page.BleedBox, _Page.ContentBox));
            }
            return(_Page);
        }
        private Border GetPageUiElement(int i, DocumentPaginator paginator, double scale)
        {
            var source = paginator.GetPage(i);
            var border = new Border()
            {
                Background = Brushes.White
            };

            border.Margin          = new Thickness(10 * scale);
            border.BorderBrush     = Brushes.DarkGray;
            border.BorderThickness = new Thickness(1);
            //var margin = PrintUtility.GetPageMargin(CurrentPrinterName);
            var margin    = new Thickness();
            var rectangle = new Rectangle();

            rectangle.Width  = ((source.Size.Width * 0.96 - (margin.Left + margin.Right)) * scale);
            rectangle.Height = ((source.Size.Height * 0.96 - (margin.Top + margin.Bottom)) * scale);
            rectangle.Margin = new Thickness(margin.Left * scale, margin.Top * scale, margin.Right * scale, margin.Bottom * scale);
            rectangle.Fill   = Brushes.White;
            var vb = new VisualBrush(source.Visual);

            vb.Opacity     = 1;
            vb.Stretch     = Stretch.Uniform;
            rectangle.Fill = vb;
            border.Child   = rectangle;
            return(border);
        }
示例#9
0
        public override DocumentPage GetPage(int pageNumber)
        {
            var page = m_Paginator.GetPage(pageNumber);
            // Create a wrapper visual for transformation and add extras
            var newpage = new ContainerVisual();
            var title   = new DrawingVisual();

            using (var ctx = title.RenderOpen())
            {
                if (m_Typeface == null)
                {
                    m_Typeface = new Typeface("Arial");
                }
                var text = new FormattedText("GS Server Notes - Page " + (pageNumber + 1),
                                             System.Globalization.CultureInfo.CurrentCulture, FlowDirection.LeftToRight,
                                             m_Typeface, 14, Brushes.Black, VisualTreeHelper.GetDpi(newpage).PixelsPerDip);
                ctx.DrawText(text, new Point(0, -96 / 4.0)); // 1/4 inch above page content
            }
            var background = new DrawingVisual();

            using (var ctx = background.RenderOpen())
            {
                ctx.DrawRectangle(new SolidColorBrush(Color.FromRgb(255, 255, 255)), null, page.ContentBox);
            }
            newpage.Children.Add(background); // Scale down page and center
            var smallerPage = new ContainerVisual();

            smallerPage.Children.Add(page.Visual);
            smallerPage.Transform = new MatrixTransform(0.95, 0, 0, 0.95, 0.025 * page.ContentBox.Width, 0.025 * page.ContentBox.Height);
            newpage.Children.Add(smallerPage);
            newpage.Children.Add(title);
            newpage.Transform = new TranslateTransform(m_Margin.Width, m_Margin.Height);
            return(new DocumentPage(newpage, m_PageSize, Move(page.BleedBox), Move(page.ContentBox)));
        }
        public override DocumentPage GetPage(int pageNumber)
        {
            m_PageContent.Children.Clear();
            m_SmallerPage.Children.Clear();
            m_NewPage.Children.Clear();
            m_SmallerPageContainer.Children.Clear();
            DrawingVisual title        = new DrawingVisual();
            var           pixelsPerDip = GNPXApp000.pixelsPerDip;

            using (DrawingContext ctx = title.RenderOpen()){
                FontFamily    font     = new FontFamily("Times New Roman");
                Typeface      typeface = new Typeface(font, FontStyles.Normal, FontWeights.Bold, FontStretches.Normal);
                FormattedText text     = new FormattedText("Page " + (pageNumber + 1) + " of " + m_PageCount,
                                                           System.Globalization.CultureInfo.CurrentCulture, FlowDirection.LeftToRight,
                                                           typeface, 14, Brushes.Black, pixelsPerDip);
                ctx.DrawText(text, new Point(0, 0));
            }

            DocumentPage page = m_Paginator.GetPage(0);

            m_PageContent.Children.Add(page.Visual);
            RectangleGeometry clip = new RectangleGeometry(new Rect(0, m_ContentSize.Height * pageNumber, m_ContentSize.Width, m_ContentSize.Height));

            m_PageContent.Clip      = clip;
            m_PageContent.Transform = new TranslateTransform(0, -m_ContentSize.Height * pageNumber);
            m_SmallerPage.Children.Add(m_PageContent);
            m_SmallerPage.Transform = new ScaleTransform(0.95, 0.95);
            m_SmallerPageContainer.Children.Add(m_SmallerPage);
            m_SmallerPageContainer.Transform = new TranslateTransform(0, 24);
            m_NewPage.Children.Add(title);
            m_NewPage.Children.Add(m_SmallerPageContainer);
            m_NewPage.Transform = new TranslateTransform(m_Margin.Width, m_Margin.Height);
            return(new DocumentPage(m_NewPage, m_PageSize, Move(page.BleedBox), Move(page.ContentBox)));
        }
        /// <summary>
        /// 加载分页器
        /// </summary>
        private void LoadPaginator()
        {
            _paginator = PaginatorFactory.GetDocumentPaginator(_config);

            OnPageLoading();

            Task.Factory.StartNew(() =>
            {
                if (PageOrientation == PageOrientation.Portrait)
                {
                    _paginator.PageSize = new Size((int)PageSize.Width, (int)PageSize.Height);
                }
                else if (PageOrientation == PageOrientation.Landscape)
                {
                    _paginator.PageSize = new Size((int)PageSize.Height, (int)PageSize.Width);
                }

                PageCount = _paginator.PageCount;

                EndIndex = PageCount - 1;

                CurrentPageIndex = 0;

                _dispatcher.BeginInvoke(new Action(() => OnPageChanged(_paginator.GetPage(CurrentPageIndex))));
            });
        }
示例#12
0
        /*
         * private bool walk_child_nodes_for_BringIntoView(string uri, DependencyObject parent)
         * {
         *  bool found = false;
         *  try
         *  {
         *
         *      for (int i = 0; i < System.Windows.Media.VisualTreeHelper.GetChildrenCount(parent); i++)
         *      {
         *          System.Windows.Media.Visual child = null;
         *          try
         *          {
         *              child = (System.Windows.Media.Visual)System.Windows.Media.VisualTreeHelper.GetChild(parent, i);
         *              if (child != null)
         *              {
         *                  string res = "";
         *                  res = child.GetValue(System.Windows.Documents.Glyphs.NameProperty).ToString();
         *                  if (res.Equals(uri))
         *                  {
         *                      ((FrameworkElement)child).BringIntoView();
         *                      found = true;
         *                  }
         *              }
         *          }
         *          catch //(System.Exception ex)
         *          {
         *              //...
         *          }
         *          if (found == false && child != null)
         *              walk_child_nodes_for_BringIntoView(uri, child);
         *      }
         *  }
         *  catch //(System.Exception ex)
         *  {
         *      //...
         *  }
         *  return found;
         * }
         */

        private bool BringIntoView_ByURI(string url_to_search, int pageIdx)
        {
            bool found = false;

            try
            {
                DocumentPaginator           pag  = documentViewer.Document.DocumentPaginator;
                FixedDocumentSequence       seq  = (FixedDocumentSequence)documentViewer.Document;
                System.Windows.Media.Visual page = pag.GetPage(pageIdx).Visual;

                FixedPage fp  = page as FixedPage;
                Canvas    can = fp.Children[0] as Canvas;
                object    obj = can.FindName(url_to_search);
                if (obj != null)
                {
                    ((FrameworkElement)obj).BringIntoView();
                    found = true;
                }
            }
            catch (Exception ex)
            {
                LogFile.Error("Error in BringIntoView_ByURI()", ex);
            }
            return(found);
        }
示例#13
0
        protected override void OnKeyDown(System.Windows.Input.KeyEventArgs e)
        {
            base.OnKeyDown(e);
            if (e.Key == Key.D1)
            {
                pageIndex = 0;
                index++;
                if (index >= xpsList.Count)
                {
                    index = 0;
                }
                XpsDocument _xpsDocument = new XpsDocument(xpsList[index], System.IO.FileAccess.Read);

                paginator = _xpsDocument.GetFixedDocumentSequence().DocumentPaginator;
                Console.WriteLine("page size " + paginator.PageCount);
                Console.WriteLine("page size " + paginator.PageSize);
                var page = paginator.GetPage(pageIndex);

                DrawPage(page.Visual, page.Size);
            }
            if (e.Key == Key.D2)
            {
                pageIndex++;
                if (pageIndex >= paginator.PageCount)
                {
                    pageIndex = 0;
                }
                var page = paginator.GetPage(pageIndex);

                DrawPage(page.Visual, page.Size);
            }
        }
示例#14
0
        public override DocumentPage GetPage(int pageNumber)
        {
            DocumentPage page = m_Paginator.GetPage(pageNumber);
            // Create a wrapper visual for transformation and add extras

            ContainerVisual newpage = new ContainerVisual();
            DrawingVisual   title   = new DrawingVisual();

            using (DrawingContext ctx = title.RenderOpen())
            {
                if (m_Typeface == null)
                {
                    m_Typeface = new Typeface("Times New Roman");
                }

                FormattedText text = new FormattedText("Page " + (pageNumber + 1),
                                                       System.Globalization.CultureInfo.CurrentCulture, FlowDirection.LeftToRight,
                                                       m_Typeface, 14, Brushes.Black);
                ctx.DrawText(text, new Point(0, -96 / 4)); // 1/4 inch above page content
            }

            ContainerVisual smallerPage = new ContainerVisual();

            smallerPage.Children.Add(page.Visual);
            smallerPage.Transform = new MatrixTransform(0.95, 0, 0, 0.95,
                                                        0.025 * page.ContentBox.Width, 0.025 * page.ContentBox.Height);

            newpage.Children.Add(smallerPage);
            newpage.Children.Add(title);
            newpage.Transform = new TranslateTransform(m_Margin.Width, m_Margin.Height);

            return(new DocumentPage(newpage, m_PageSize, Move(page.BleedBox), Move(page.ContentBox)));
        }
        public override DocumentPage GetPage(int pageNumber)
        {
            DocumentPage page = _paginator.GetPage(pageNumber + FirstPritedPage);

            var newpage = new ContainerVisual();

            if (BackgroundBrush != null)
            {
                newpage.Children.Add(GetBackColorVisual(page, BackgroundBrush));
            }

            if (Mark != null && Mark.ImageSource != null)
            {
                DrawingVisual background = GetBackgroundVisual(page);

                newpage.Children.Add(background);
            }

            ContainerVisual smallerPage = GetPageContentVisual(page);

            newpage.Children.Add(smallerPage);

            ContainerVisual footer = GetFooterVisual(page, pageNumber);

            if (footer != null)
            {
                newpage.Children.Add(footer);
            }

            return(new DocumentPage(newpage, page.Size, page.BleedBox, page.ContentBox));
        }
示例#16
0
        public void SaveToTIF(string fileName)
        {
            XpsDocument           xd        = new XpsDocument(fileName, System.IO.FileAccess.Read);
            FixedDocumentSequence fds       = xd.GetFixedDocumentSequence();
            DocumentPaginator     paginator = fds.DocumentPaginator;

            System.Windows.Media.Visual visual = paginator.GetPage(0).Visual;

            System.Windows.FrameworkElement fe = (System.Windows.FrameworkElement)visual;

            int    multiplyFactor = 4;
            string outputPath     = fileName.Replace(".xps", ".tif");

            RenderTargetBitmap bmp = new RenderTargetBitmap(
                (int)fe.ActualWidth * multiplyFactor,
                (int)fe.ActualHeight * multiplyFactor,
                96d * multiplyFactor,
                96d * multiplyFactor,
                System.Windows.Media.PixelFormats.Default);

            bmp.Render(fe);

            TiffBitmapEncoder tff = new TiffBitmapEncoder();

            tff.Frames.Add(BitmapFrame.Create(bmp));

            using (Stream stream = File.Create(outputPath))
            {
                tff.Save(stream);
            }
        }
示例#17
0
        /* Wrap fixed page to avoid exception of fixed page in fixed page */
        public override DocumentPage GetPage(int page_num)
        {
            var page = _basepaginator.GetPage(page_num + _first);

            var vis_cont = new ContainerVisual();

            if (page.Visual is FixedPage)
            {
                foreach (var child in ((FixedPage)page.Visual).Children)
                {
                    var clone = (System.Windows.UIElement)child.GetType().GetMethod("MemberwiseClone",
                                                                                    BindingFlags.Instance | BindingFlags.NonPublic).Invoke(child, null);

                    var parentField = clone.GetType().GetField("_parent",
                                                               BindingFlags.Instance | BindingFlags.NonPublic);
                    if (parentField != null)
                    {
                        parentField.SetValue(clone, null);
                        vis_cont.Children.Add(clone);
                    }
                }
                return(new DocumentPage(vis_cont, page.Size, page.BleedBox,
                                        page.ContentBox));
            }
            return(page);
        }
示例#18
0
        public override DocumentPage GetPage(int pageNumber)
        {
            var page = _paginator.GetPage(pageNumber + _startIndex);

            // Create a new ContainerVisual as a new parent for page children
            var cv = new ContainerVisual();

            if (page.Visual is FixedPage)
            {
                foreach (var child in ((FixedPage)page.Visual).Children)
                {
                    // Make a shallow clone of the child using reflection
                    var childClone = (UIElement)child.GetType().GetMethod("MemberwiseClone", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(child, null);

                    // Setting the parent of the cloned child to the created ContainerVisual by using Reflection.
                    // WARNING: If we use Add and Remove methods on the FixedPage.Children, for some reason it will
                    //          throw an exception concerning event handlers after the printing job has finished.
                    var parentField = childClone.GetType().GetField("_parent",
                                                                    BindingFlags.Instance | BindingFlags.NonPublic);
                    if (parentField != null)
                    {
                        parentField.SetValue(childClone, null);
                        cv.Children.Add(childClone);
                    }
                }

                return(new DocumentPage(cv, page.Size, page.BleedBox, page.ContentBox));
            }

            return(page);
        }
        public override DocumentPage GetPage(int pageNumber)
        {
            DocumentPage page = m_Paginator.GetPage(pageNumber);

            // Create a wrapper visual for transformation and add extras
            ContainerVisual newpage = new ContainerVisual();

            return(new DocumentPage(page.Visual, m_PageSize, Move(page.BleedBox), Move(page.ContentBox)));
        }
示例#20
0
        public override DocumentPage GetPage(int pageNumber)
        {
            DocumentPage    originalPage = _originalPaginator.GetPage(pageNumber);
            ContainerVisual fixedPage    = new ContainerVisual();

            fixedPage.Children.Add(originalPage.Visual);
            fixedPage.Transform = new TranslateTransform(_pageMargin.Width, _pageMargin.Height);
            return(new DocumentPage(fixedPage, _pageSize, AdjustForMargins(originalPage.BleedBox), AdjustForMargins(originalPage.ContentBox)));
        }
示例#21
0
        public static DeckModel OpenXPS(string file)
        {
            try
            {
                Misc.ProgressBarForm progressForm = new UW.ClassroomPresenter.Misc.ProgressBarForm("Opening \"" + file + "\"...");
                progressForm.Show();

                //Open Xps Document
                XpsDocument xpsDocument = null;

                xpsDocument = new XpsDocument(file, FileAccess.Read);

                //Create two DocumentPaginators for the XPS document. One is for local display, the other one is for the delivery to students.
                DocumentPaginator paginator = xpsDocument.GetFixedDocumentSequence().DocumentPaginator;

                //Create Deck Model
                Guid      deckGuid = Guid.NewGuid();
                DeckModel deck     = new DeckModel(deckGuid, DeckDisposition.Empty, file);

                using (Synchronizer.Lock(deck.SyncRoot))
                {
                    deck.IsXpsDeck = true;

                    //Iterate over all pages
                    for (int i = 0; i < paginator.PageCount; i++)
                    {
                        DocumentPage page = paginator.GetPage(i);

                        SlideModel newSlideModel = CreateSlide(page, deck);

                        //Create a new Entry + reference SlideModel
                        TableOfContentsModel.Entry newEntry = new TableOfContentsModel.Entry(Guid.NewGuid(), deck.TableOfContents, newSlideModel);
                        //Lock the TOC
                        using (Synchronizer.Lock(deck.TableOfContents.SyncRoot))
                        {
                            //Add Entry to TOC
                            deck.TableOfContents.Entries.Add(newEntry);
                        }

                        //Update the Progress Bar
                        progressForm.UpdateProgress(0, paginator.PageCount, i + 1);
                    }
                }

                //Close Progress Bar
                progressForm.Close();

                return(deck);
            }
            catch (Exception e)
            {
                System.Diagnostics.Trace.WriteLine(e.ToString());
            }
            GC.Collect();

            return(null);
        }
示例#22
0
        private void AddThumbnail(object sender, RoutedEventArgs e)
        {
            FixedDocumentSequence docSeq    = _xpsDocument.GetFixedDocumentSequence();
            DocumentPaginator     paginator = docSeq.DocumentPaginator;
            DocumentPage          page      = paginator.GetPage(0);
            // Create a rendertarget for the glyphs element. Round up width and height
            RenderTargetBitmap rt = new RenderTargetBitmap((int)page.Size.Width,
                                                           (int)page.Size.Height,
                                                           96, 96,
                                                           PixelFormats.Default);


            FixedPage fixedPage = (FixedPage)page.Visual;

            fixedPage.Measure(new Size(page.Size.Width, page.Size.Height));
            fixedPage.Arrange(new Rect(new Size(page.Size.Width, page.Size.Height)));
            rt.Render(fixedPage);
            JpegBitmapEncoder jpegEncoder = new JpegBitmapEncoder();

            jpegEncoder.Frames.Add(BitmapFrame.Create((BitmapSource)rt));
            Stream stream = new MemoryStream();

            jpegEncoder.Save(stream);
            XpsThumbnail thumbnail = _xpsDocument.AddThumbnail(XpsImageType.JpegImageType);
            Stream       dstStream = thumbnail.GetStream();

            byte[] thumbnailData = new byte[stream.Length];
            // let's read the whole block into our buffer
            int totalBytesRead = 0;
            int requestedCount = (int)stream.Length;

            stream.Position = 0;
            while (totalBytesRead < requestedCount)
            {
                int bytesRead = stream.Read(thumbnailData,
                                            totalBytesRead,
                                            requestedCount - totalBytesRead);
                if (bytesRead == 0)
                {
                    break;
                }
                totalBytesRead += bytesRead;
            }
            dstStream.Write(thumbnailData, 0, (int)stream.Length);
            dstStream.Close();
            thumbnail.Commit();
            _xpsDocument.Close();
            stream.Position = 0;
            ImageBrush imageBrush = new ImageBrush(BitmapFrame.Create(stream));

            imageBrush.Stretch    = Stretch.Uniform;
            thumbnailDisplay.Fill = imageBrush;

            // Once a thumbnail is set disable the "Add Thumbnail" button.
            addThumbnailButton.IsEnabled = false;
        }
示例#23
0
        private RenderTargetBitmap GetPageBitmap(DocumentPaginator documentPaginator, int pageNumber, Parameters parameters)
        {
            const double dpiConst = 96.0;

            double dpi = parameters.Dpi;

            var size = parameters.RequiredSize ?? new Size();

            bool isSizeDefined(int requiredSize) => requiredSize > 0;

            void calcDpi(int requiredSize, double pageSize)
            {
                if (isSizeDefined(requiredSize))
                {
                    dpi = (requiredSize / pageSize) * dpiConst;
                }
            }

            try
            {
                using (var page = documentPaginator.GetPage(pageNumber))
                {
                    if (!size.IsEmpty)
                    {
                        var portrait = page.Size.Height >= page.Size.Width;

                        if (portrait || !isSizeDefined(size.Width))
                        {
                            calcDpi(size.Height, page.Size.Height);
                        }

                        if (!portrait || !isSizeDefined(size.Height))
                        {
                            calcDpi(size.Width, page.Size.Width);
                        }
                    }

                    var ratio = dpi / dpiConst;

                    var bitmap = new RenderTargetBitmap((int)Math.Round(page.Size.Width * ratio),
                                                        (int)Math.Round(page.Size.Height * ratio), dpi, dpi, PixelFormats.Pbgra32);

                    bitmap.Render(page.Visual);

                    // Memory leak fix.
                    // http://social.msdn.microsoft.com/Forums/en/wpf/thread/c6511918-17f6-42be-ac4c-459eeac676fd
                    ((FixedPage)page.Visual).UpdateLayout();

                    return(bitmap);
                }
            }
            catch (XamlParseException ex)
            {
                throw new ConversionException(ex.Message, pageNumber + 1, ex);
            }
        }
示例#24
0
        internal static DocumentPage GetPage(DocumentPaginator paginator, int index)
        {
            EmitEvent(EventTrace.Event.WClientDRXGetPageBegin);

            DocumentPage page = paginator.GetPage(index);

            EmitEvent(EventTrace.Event.WClientDRXGetPageEnd);

            return(page);
        }
示例#25
0
 /// <summary>
 /// Write a single DocumentPaginator and close package
 /// </summary>
 public override void Write(DocumentPaginator documentPaginator, PrintTicket printTicket)
 {
     //SerializeVisualTree(documentPaginator.Source as DependencyObject);
     for (int i = 0; i < documentPaginator.PageCount; i++)
     {
         DocumentPage page = documentPaginator.GetPage(i);
         SerializeVisualTree(page.Visual);
     }
     _writer.Close();
 }
示例#26
0
        /// <summary>
        /// This is the most important method , modifies the original
        /// </summary>
        public override DocumentPage GetPage(int pageNumber)
        {
            var newpage = new ContainerVisual();

            if (pageNumber == 0 && reportDef.FirstPageHeader != null)
            {
                var v = GetVisualFromTemplate(reportDef.FirstPageHeader);
                v.Offset = new Vector(0, 0);
                newpage.Children.Add(v);
            }
            else if (pageNumber == 0 && reportDef.FirstPageHeader == null && reportDef.PageHeader != null)
            {
                var v = GetVisualFromTemplate(reportDef.PageHeader);
                v.Offset = new Vector(0, 0);
                newpage.Children.Add(v);
            }
            if (pageNumber > 0 && reportDef.PageHeader != null)
            {
                var v = GetVisualFromTemplate(reportDef.PageHeader);
                v.Offset = new Vector(0, 0);
                newpage.Children.Add(v);
            }

            var smallerPage = new ContainerVisual();
            var page        = paginator.GetPage(pageNumber);

            smallerPage.Children.Add(page.Visual);

            if (pageNumber == 0 && reportDef.FirstPageHeader != null)
            {
                smallerPage.Offset = new Vector(0, reportDef.FirstHeaderHeight);
            }
            else
            {
                smallerPage.Offset = new Vector(0, reportDef.HeaderHeight);
            }
            newpage.Children.Add(smallerPage);

            if (pageNumber == pageCount - 1 && reportDef.LastPageFooter != null)
            {
                var v = GetVisualFromTemplate(reportDef.LastPageFooter);
                v.Offset = new Vector(0, reportDef.HeaderHeight + paginator.PageSize.Height - reportDef.LastFooterHeight - reportDef.PagePadding.Top);
                newpage.Children.Add(v);
            }
            else if (reportDef.PageFooter != null)
            {
                var v = GetVisualFromTemplate(reportDef.PageFooter);
                v.Offset = new Vector(0, reportDef.HeaderHeight + paginator.PageSize.Height - reportDef.FooterHeight - reportDef.PagePadding.Top);
                newpage.Children.Add(v);
            }

            var dp = new DocumentPage(newpage, new Size(pageSize.Width, pageSize.Height), page.BleedBox, page.ContentBox);

            return(dp);
        }
示例#27
0
        private void SinglePageImage_Click(object sender, RoutedEventArgs e)
        {
            MyPopUp.IsOpen = false;
            try
            {
                if (officeFileOpen_Status)
                {
                    FixedDocumentSequence seq;
                    seq = xpsDoc.GetFixedDocumentSequence();
                    DocumentPaginator paginator = seq.DocumentPaginator;
                    if (int.Parse(PageNumberBox.Text) < paginator.PageCount)
                    {
                        FolderBrowserDialog folderBrowserDialog1 = new FolderBrowserDialog();
                        DialogResult        result = folderBrowserDialog1.ShowDialog();
                        string localpath           = String.Empty;
                        localpath = folderBrowserDialog1.SelectedPath;
                        //// I only want the all page for this example

                        Visual           visual = paginator.GetPage((int.Parse(PageNumberBox.Text) - 1)).Visual;
                        FrameworkElement fe     = (FrameworkElement)visual;
                        int    multiplyFactor   = 4;
                        string outputPath       = localpath + "\\page" + (int.Parse(PageNumberBox.Text) - 1) + ".png";
                        Console.WriteLine(localpath);
                        RenderTargetBitmap bmp = new RenderTargetBitmap(
                            (int)fe.ActualWidth * multiplyFactor,
                            (int)fe.ActualHeight * multiplyFactor,
                            96d * multiplyFactor,
                            96d * multiplyFactor,
                            PixelFormats.Default);
                        bmp.Render(fe);
                        PngBitmapEncoder png = new PngBitmapEncoder();
                        png.Frames.Add(BitmapFrame.Create(bmp));
                        using (Stream stream = File.Create(outputPath))
                        {
                            png.Save(stream);
                        }
                        System.Windows.MessageBox.Show("Image Saved Successfully", "Status", MessageBoxButton.OK, MessageBoxImage.Information);
                    }

                    else
                    {
                        System.Windows.MessageBox.Show("Given Page Number is Greater than Number of pages in the Document", "Page Number Overflow", MessageBoxButton.OK, MessageBoxImage.Information);
                    }
                }

                else
                {
                    System.Windows.MessageBox.Show("Please select a office File (*.docx,*.doc,*.els,*.elsx,*.ppt,*.pptx)", "Select a MS Office File", MessageBoxButton.OK, MessageBoxImage.Information);
                }
            }
            catch (Exception)
            {
                System.Windows.MessageBox.Show("Please Select a Folder Loaction to Store the Images", "Select a Folder Loaction", MessageBoxButton.OK, MessageBoxImage.Information);
            }
        }
    public override DocumentPage GetPage(int pageNumber)
    {
        DocumentPage cachedPage;

        if (_PageCache.TryGetValue(pageNumber, out cachedPage) && cachedPage.Visual != null)
        {
            return(cachedPage);
        }
        DocumentPage page = _Paginator.GetPage(pageNumber);
        // Create a wrapper visual for transformation and add extras
        ContainerVisual newpage = new ContainerVisual();
        public override DocumentPage GetPage(int pageNumber)
        {
            _pageNumber = pageNumber + 1;
            DocumentPage    page          = _paginator.GetPage(pageNumber);
            ContainerVisual printedPage   = new ContainerVisual();
            ContainerVisual pageContainer = new ContainerVisual();

            pageContainer.Children.Add(page.Visual);
            pageContainer.Transform = new TranslateTransform(_margin.Left, _margin.Top);
            printedPage.Children.Add(pageContainer);
            AddHeader(printedPage);
            AddFooter(printedPage);
            return(new DocumentPage(printedPage, _pageSize, _pageBox, _contentBox));
        }
示例#30
0
    public PrintPaginatorWrapper(DocumentPaginator paginator, Margins margin, double borderThickness, System.Windows.Media.Brush borderBrush, double headerSize, double footerSize) : this()
    {
        //One way to provide a few options. Set them all here.
        _headerSize  = headerSize;
        _footerSize  = footerSize;
        _thickness   = borderThickness;
        _borderBrush = borderBrush;
        PPageSize    = paginator.PageSize;
        _margin      = margin;
        _paginator   = paginator;
        DocumentPage t = _paginator.GetPage(1);

        _paginator.PageSize = new System.Windows.Size(PPageSize.Width - (margin.Left + margin.Right), PPageSize.Height - (margin.Top + margin.Bottom));
    }