public static BitmapSource Render(this PdfDocumentWrapper doc, int page, double factor, bool fixDpi = true) { var scale = DisplayDeviceHelper.GetCurrentScaleFactor(); var dpiX = fixDpi ? scale.Horizontal * DisplayDeviceHelper.DefaultDpi : 96; var dpiY = fixDpi ? scale.Vertical * DisplayDeviceHelper.DefaultDpi : 96; Bitmap bitmap; lock (LockObj) { var size = doc.PdfDocument.PageSizes[page]; var realWidth = (int)Math.Round(size.Width * scale.Horizontal * factor); var realHeight = (int)Math.Round(size.Height * scale.Vertical * factor); bitmap = doc.PdfDocument.Render(page, realWidth, realHeight, dpiX, dpiY, PdfRotation.Rotate0, PdfRenderFlags.LimitImageCacheSize | PdfRenderFlags.LcdText | PdfRenderFlags.Annotations | PdfRenderFlags.ForPrinting, true) as Bitmap; } var bs = bitmap?.ToBitmapSource(); bitmap?.Dispose(); bs?.Freeze(); return(bs); }
public void Refresh() { var oldD = PdfDocument; PdfStream.Position = 0; var newObj = new PdfDocumentWrapper(PdfStream); PdfDocument = newObj.PdfDocument; PdfStream = newObj.PdfStream; oldD.Dispose(); }
public static BitmapSource RenderThumbnail(this PdfDocumentWrapper doc, int page) { lock (LockObj) { if (_renderCount++ == 50) { doc.Refresh(); _renderCount = 0; } } var size = doc.PdfDocument.PageSizes[page]; var factorX = 60d / size.Width; var factorY = 120d / size.Height; return(doc.Render(page, Math.Min(factorX, factorY), false)); }