MainWindow.xaml
<Window x:Class="WpfDemo.Views.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfDemo"
mc:Ignorable="d" Title="MainWindow">
<StackPanel Orientation="Vertical" HorizontalAlignment="Center">
<TextBlock Text="This is Print Preview demo"/>
<Button Content="Open file dialog" Command="{Binding ClickCommand}" Margin="10" Width="100"/>
</StackPanel>
</Window>
MainWindow.xaml.cs
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new MainWindowViewModel();
}
}
MainWindowViewModel.cs
public class MainWindowViewModel : BindableBase
{
public MainWindowViewModel()
{
}
DelegateCommand _clickCommand;
public DelegateCommand ClickCommand
{
get
{
return _clickCommand = _clickCommand ?? new DelegateCommand(PrintPreview);
}
}
public void PrintPreview()
{
using (MemoryStream xpsStream = new MemoryStream())
{
using (Package package = Package.Open(xpsStream, FileMode.Create, FileAccess.ReadWrite))
{
var packageUriString = Environment.GetEnvironmentVariable("temp") + @"\data.xps";
Uri packageUri = new Uri(packageUriString);
PackageStore.AddPackage(packageUri, package);
XpsDocument xpsDocument = new XpsDocument(package, CompressionOption.Maximum, packageUriString);
XpsDocumentWriter writer = XpsDocument.CreateXpsDocumentWriter(xpsDocument);
PrintTicket printTicket = new PrintTicket();
var viewToPrint = Application.Current.MainWindow;
//here you can use your view which you want to print. i am trying to print Mainwindow.
writer.Write(viewToPrint, printTicket);
FixedDocumentSequence document = xpsDocument.GetFixedDocumentSequence();
xpsDocument.Close();
PrintPreviewDialog printPreviewWnd = new PrintPreviewDialog(document);
printPreviewWnd.ShowDialog();
PackageStore.RemovePackage(packageUri);
}
}
}
}
PrintPreviewDialog.xaml
<Window x:Class="WpfDemo.Views.PrintPreviewDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfDemo"
mc:Ignorable="d"
Title="Print Preview">
<DocumentViewer Document="{Binding}"/>
</Window>
PrintPreviewDialog.xaml.cs
public partial class PrintPreviewDialog : Window
{
public PrintPreviewDialog(IDocumentPaginatorSource document)
{
InitializeComponent();
DataContext = document;
}
}
Comments
Post a Comment