public FlexPaginator(C1FlexGrid flex, ScaleMode scaleMode, Size pageSize, Thickness margin, int maxPages) { // save parameters _margin = margin; _scaleMode = scaleMode; _pageSize = pageSize; // adjust page size for margins before building grid images pageSize.Width -= (margin.Left + margin.Right); pageSize.Height -= (margin.Top + margin.Bottom); // get grid images for each page _pages = flex.GetPageImages(scaleMode, pageSize, maxPages); }
public static void RenderGrid(C1PdfDocument pdf, C1FlexGrid flex, PdfExportOptions options) { // get rendering options if (options == null) { options = new PdfExportOptions(); } // get root element to lay out the PDF pages Panel root = null; for (var parent = flex.Parent as FrameworkElement; parent != null; parent = parent.Parent as FrameworkElement) { if (parent is Panel) { root = parent as Panel; } } // get page size var rc = pdf.PageRectangle; // create panel to hold elements while they render var pageTemplate = new PageTemplate(); pageTemplate.Width = rc.Width; pageTemplate.Height = rc.Height; pageTemplate.SetPageMargin(options.Margin); root.Children.Add(pageTemplate); // render grid into PDF document var m = options.Margin; var sz = new Size(rc.Width - m.Left - m.Right, rc.Height - m.Top - m.Bottom); var pages = flex.GetPageImages(options.ScaleMode, sz, 100); for (int i = 0; i < pages.Count; i++) { // skip a page when necessary if (i > 0) { pdf.NewPage(); } // set content pageTemplate.PageContent.Child = pages[i]; pageTemplate.PageContent.Stretch = options.ScaleMode == ScaleMode.ActualSize ? System.Windows.Media.Stretch.None : System.Windows.Media.Stretch.Uniform; // set header/footer text pageTemplate.HeaderLeft.Text = options.DocumentTitle; if (options.KnownPageCount) { pageTemplate.FooterRight.Text = string.Format("Page {0} of {1}", pdf.CurrentPage + 1, pages.Count); } else { pageTemplate.FooterRight.Text = string.Format("Page {0}", pdf.CurrentPage + 1); } // measure page element pageTemplate.UpdateLayout(); pageTemplate.Arrange(new Rect(0, 0, rc.Width, rc.Height)); // add to PDF pdf.DrawElement(pageTemplate, rc); } // done with template root.Children.Remove(pageTemplate); }
//Adding pages to the list of framework elements public void AddPages(C1FlexGrid flex) { _pages.AddRange(flex.GetPageImages(_scaleMode, _pageSize, 100)); }