public void Validate_range() { var baseDoc = new RejectsDocument(Enumerable.Repeat(1, 100).Select(i => new Reject()).ToList(), false); var flowDoc = baseDoc.Build(); var paginator = new WrapDocumentPaginator(flowDoc, baseDoc, PageRangeSelection.UserPages, new PageRange(1, 100)); paginator.GetPage(0); Assert.AreEqual(2, paginator.PageCount); }
public static RenderTargetBitmap ToBitmap(WrapDocumentPaginator dp, int pageNum, bool contentOnly) { var page = dp.GetPage(pageNum); var pagevisual = page.Visual as ContainerVisual; var pageSize = page.Size; if (contentOnly) { var rects = new List <Rect>(); foreach (var item in pagevisual.Children) { var container = item as ContainerVisual; var offset = container.Transform; var containerItem = container.Descendants <ContainerVisual>().ToArray()[1]; var rect = containerItem.DescendantBounds; rect.Offset(offset.Value.OffsetX, offset.Value.OffsetY); rects.Add(rect); } var pt = new Point { X = rects.Min(r => r.X), Y = rects.Min(r => r.Y) }; pt.X = pt.X < 0 ? 0 : pt.X; pt.Y = pt.Y < 0 ? 0 : pt.Y; var maxWidth = rects.Max(r => (r.X + r.Width)) + 2; var maxHeight = rects.Max(r => (r.Y + r.Height)) + 2; var size = new Size(maxWidth - pt.X, maxHeight - pt.Y); pageSize = size; pagevisual.Offset = new Vector(-pt.X, -pt.Y); } var renderBmp = new RenderTargetBitmap((int)pageSize.Width, (int)pageSize.Height, 96d, 96d, PixelFormats.Pbgra32); renderBmp.Render(pagevisual); var dWidth = (int)pageSize.Width; var dHeight = (int)pageSize.Height; var dStride = dWidth * 4; byte[] pixels = new byte[dHeight * dStride]; for (var j = 0; j < pixels.Length; j++) { pixels[j] = 0xFF; } var bg = BitmapSource.Create(dWidth, dHeight, 96, 96, PixelFormats.Pbgra32, null, pixels, dStride); var dv = new DrawingVisual(); var dc = dv.RenderOpen(); dc.DrawImage(bg, new Rect(0, 0, dWidth, dHeight)); dc.DrawImage(renderBmp, new Rect(0, 0, dWidth, dHeight)); dc.Close(); var resultBitmap = new RenderTargetBitmap((int)dWidth, (int)dHeight, 96d, 96d, PixelFormats.Pbgra32); resultBitmap.Render(dv); return(resultBitmap); }