using System.IO; using System.Windows; using System.Windows.Media; using System.Windows.Media.Imaging; namespace DebtMgr.Helper { public class PrintHelper { //////////////////////////////////////////////////////////////////////////////////////////////////// /// Saves an using encoder. /// /// Andre Beging, 13.09.2017. /// /// Filename of the file. /// The element. //////////////////////////////////////////////////////////////////////////////////////////////////// public static void SaveUsingEncoder(string fileName, FrameworkElement uiElement) { var encoder = new PngBitmapEncoder(); var height = (int)uiElement.ActualHeight; var width = (int)uiElement.ActualWidth; // These two line of code make sure that you get completed visual bitmap. // In case your Framework Element is inside the scroll viewer then some part which is not // visible gets clip. uiElement.Measure(new Size(width, height)); uiElement.Arrange(new Rect(new Point(), new Point(width, height))); var bitmap = new RenderTargetBitmap(width, height, 96, // These decides the dpi factors 96,// The can be changed when we'll have preview options. PixelFormats.Pbgra32); bitmap.Render(uiElement); SaveUsingBitmapTargetRenderer(fileName, bitmap, encoder); } //////////////////////////////////////////////////////////////////////////////////////////////////// /// Saves an using bitmap target renderer. /// /// Andre Beging, 13.09.2017. /// /// Filename of the file. /// The render target bitmap. /// The bitmap encoder. //////////////////////////////////////////////////////////////////////////////////////////////////// private static void SaveUsingBitmapTargetRenderer(string fileName, RenderTargetBitmap renderTargetBitmap, BitmapEncoder bitmapEncoder) { var frame = BitmapFrame.Create(renderTargetBitmap); bitmapEncoder.Frames.Add(frame); // Save file . using (var stream = File.Create(fileName)) { bitmapEncoder.Save(stream); } } } }