/// <summary> /// Called when the Ddl property has changed. /// </summary> void DdlUpdated() { if (_ddl != null) { _document = DdlReader.DocumentFromString(_ddl); _renderer = new DocumentRenderer(_document); //this.renderer.PrivateFonts = this.privateFonts; _renderer.PrepareDocument(); //IDocumentPaginatorSource source = this.documentViewer.Document; //IDocumentPaginatorSource source = this.documentViewer.Document; int pageCount = _renderer.FormattedDocument.PageCount; if (pageCount == 0) return; // HACK: hardcoded A4 size //double pageWidth = XUnit.FromMillimeter(210).Presentation; //double pageHeight = XUnit.FromMillimeter(297).Presentation; //Size a4 = new Size(pageWidth, pageHeight); XUnit pageWidth, pageHeight; Size size96 = GetSizeOfPage(1, out pageWidth, out pageHeight); FixedDocument fixedDocument = new FixedDocument(); fixedDocument.DocumentPaginator.PageSize = size96; for (int pageNumber = 1; pageNumber <= pageCount; pageNumber++) { try { size96 = GetSizeOfPage(1, out pageWidth, out pageHeight); DrawingVisual dv = new DrawingVisual(); DrawingContext dc = dv.RenderOpen(); //XGraphics gfx = XGraphics.FromDrawingContext(dc, new XSize(XUnit.FromMillimeter(210).Point, XUnit.FromMillimeter(297).Point), XGraphicsUnit.Point); XGraphics gfx = XGraphics.FromDrawingContext(dc, new XSize(pageWidth.Point, pageHeight.Presentation), XGraphicsUnit.Point); _renderer.RenderPage(gfx, pageNumber, PageRenderOptions.All); dc.Close(); // Create page content PageContent pageContent = new PageContent(); pageContent.Width = size96.Width; pageContent.Height = size96.Height; FixedPage fixedPage = new FixedPage(); fixedPage.Background = new SolidColorBrush(System.Windows.Media.Color.FromRgb(0xFE, 0xFE, 0xFE)); UIElement visual = new DrawingVisualPresenter(dv); FixedPage.SetLeft(visual, 0); FixedPage.SetTop(visual, 0); fixedPage.Width = size96.Width; fixedPage.Height = size96.Height; fixedPage.Children.Add(visual); fixedPage.Measure(size96); fixedPage.Arrange(new Rect(new Point(), size96)); fixedPage.UpdateLayout(); ((IAddChild)pageContent).AddChild(fixedPage); fixedDocument.Pages.Add(pageContent); } catch (Exception) { // eat exception } viewer.Document = fixedDocument; } } else viewer.Document = null; }
/// <summary> /// Called when the Ddl property has changed. /// </summary> void DdlUpdated() { if (_ddl != null) { _document = DdlReader.DocumentFromString(_ddl); _renderer = new DocumentRenderer(_document); //this.renderer.PrivateFonts = this.privateFonts; _renderer.PrepareDocument(); //IDocumentPaginatorSource source = this.documentViewer.Document; //IDocumentPaginatorSource source = this.documentViewer.Document; int pageCount = _renderer.FormattedDocument.PageCount; if (pageCount == 0) { return; } // HACK: hardcoded A4 size //double pageWidth = XUnit.FromMillimeter(210).Presentation; //double pageHeight = XUnit.FromMillimeter(297).Presentation; //Size a4 = new Size(pageWidth, pageHeight); XUnit pageWidth, pageHeight; Size size96 = GetSizeOfPage(1, out pageWidth, out pageHeight); FixedDocument fixedDocument = new FixedDocument(); fixedDocument.DocumentPaginator.PageSize = size96; for (int pageNumber = 1; pageNumber <= pageCount; pageNumber++) { try { size96 = GetSizeOfPage(1, out pageWidth, out pageHeight); DrawingVisual dv = new DrawingVisual(); DrawingContext dc = dv.RenderOpen(); //XGraphics gfx = XGraphics.FromDrawingContext(dc, new XSize(XUnit.FromMillimeter(210).Point, XUnit.FromMillimeter(297).Point), XGraphicsUnit.Point); XGraphics gfx = XGraphics.FromDrawingContext(dc, new XSize(pageWidth.Point, pageHeight.Presentation), XGraphicsUnit.Point); _renderer.RenderPage(gfx, pageNumber, PageRenderOptions.All); dc.Close(); // Create page content PageContent pageContent = new PageContent(); pageContent.Width = size96.Width; pageContent.Height = size96.Height; FixedPage fixedPage = new FixedPage(); fixedPage.Background = new SolidColorBrush(System.Windows.Media.Color.FromRgb(0xFE, 0xFE, 0xFE)); UIElement visual = new DrawingVisualPresenter(dv); FixedPage.SetLeft(visual, 0); FixedPage.SetTop(visual, 0); fixedPage.Width = size96.Width; fixedPage.Height = size96.Height; fixedPage.Children.Add(visual); fixedPage.Measure(size96); fixedPage.Arrange(new Rect(new Point(), size96)); fixedPage.UpdateLayout(); ((IAddChild)pageContent).AddChild(fixedPage); fixedDocument.Pages.Add(pageContent); } catch (Exception) { // eat exception } viewer.Document = fixedDocument; } } else { viewer.Document = null; } }