/// <summary> /// This is the event handler for PrintDocument.Paginate. /// It fires when the PrintManager requests print preview /// </summary> /// <param name="sender">PrintDocument</param> /// <param name="e">Paginate Event Arguments</param> private void Paginate(object sender, PaginateEventArgs e) { if (pages.Count > 0) { pages.Clear(); } var mgr = new C1RichTextViewManager { Document = rtb.Document }; var layout = rtb.ViewManager.PresenterInfo as C1PageLayout; var contentSize = new Size(layout.Width - layout.Padding.Left - layout.Padding.Right, layout.Height - layout.Padding.Top - layout.Padding.Bottom); // print the pages outside the visual tree var elements = mgr.OfflinePaint(contentSize).ToList(); foreach (var el in elements) { var page = (Grid)printTemplate.LoadContent(); var canvas = el as Canvas; if (canvas != null) { canvas.Margin = layout.Padding; } page.Children.Clear(); page.Children.Add(canvas); pages.Add(page); } PrintDocument printDoc = (PrintDocument)sender; // Report the number of preview pages printDoc.SetPreviewPageCount(pages.Count, PreviewPageCountType.Intermediate); }
public C1RichTextBoxPaginator(C1RichTextBox rtb, Size pageSize, Thickness margin) { var mgr = new C1RichTextViewManager { Document = rtb.Document }; // PageSize, Margin and ContentSize PageSize = pageSize; _margin = margin; var contentSize = new Size(PageSize.Width - margin.Left - margin.Right, PageSize.Height - margin.Top - margin.Bottom); // print the pages outside the visual tree _pages = mgr.OfflinePaint(contentSize).ToList(); }