Mega Code Archive
Print a WPF Visual
//File:Window.xaml.cs
using System;
using System.Printing;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Xps;
namespace WpfApplication1
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void btnPrintVisual_Click(object sender, RoutedEventArgs e)
{
Visual visual = new Grid();
PrintDialog printDialog = new PrintDialog();
if (printDialog.ShowDialog() != true)
{
return;
}
PrintQueue pq = printDialog.PrintQueue;
Visual scaledVisual = ScaleVisual(visual, pq);
XpsDocumentWriter xpsdw = PrintQueue.CreateXpsDocumentWriter(pq);
xpsdw.Write(scaledVisual);
}
private Visual ScaleVisual(Visual v, PrintQueue pq)
{
ContainerVisual root = new ContainerVisual();
const double inch = 96;
double xMargin = 150;
double yMargin = 100;
PrintTicket pt = pq.UserPrintTicket;
double printableWidth = pt.PageMediaSize.Width.Value;
double printableHeight = pt.PageMediaSize.Height.Value;
Console.WriteLine(printableWidth);
Console.WriteLine(printableHeight);
double xScale = 2;
double yScale = 3;
root.Children.Add(v);
root.Transform = new MatrixTransform(xScale, 0, 0, yScale, xMargin, yMargin);
return root;
}
}
}