private void OnPrintPreview(object sender, ExecutedRoutedEventArgs e) { PrintDialog printDialog = new PrintDialog(); printDialog.PageRangeSelection = PageRangeSelection.AllPages; printDialog.UserPageRangeEnabled = true; bool?dialogResult = printDialog.ShowDialog(); if (dialogResult != null && dialogResult.Value == false) { return; } FlowDocument printSource = this.CreateFlowDocumentForEditor(); // Save all the existing settings. double pageHeight = printSource.PageHeight; double pageWidth = printSource.PageWidth; Thickness pagePadding = printSource.PagePadding; double columnGap = printSource.ColumnGap; double columnWidth = printSource.ColumnWidth; // Make the FlowDocument page match the printed page. printSource.PageHeight = printDialog.PrintableAreaHeight; printSource.PageWidth = printDialog.PrintableAreaWidth; printSource.PagePadding = new Thickness(20); printSource.ColumnGap = Double.NaN; printSource.ColumnWidth = printDialog.PrintableAreaWidth; Size pageSize = new Size(printDialog.PrintableAreaWidth, printDialog.PrintableAreaHeight); MemoryStream xpsStream = new MemoryStream(); Package package = Package.Open(xpsStream, FileMode.Create, FileAccess.ReadWrite); string packageUriString = "memorystream://data.xps"; PackageStore.AddPackage(new Uri(packageUriString), package); XpsDocument xpsDocument = new XpsDocument(package, CompressionOption.Normal, packageUriString); XpsDocumentWriter writer = XpsDocument.CreateXpsDocumentWriter(xpsDocument); DocumentPaginator paginator = ((IDocumentPaginatorSource)printSource).DocumentPaginator; paginator.PageSize = pageSize; paginator.ComputePageCount(); writer.Write(paginator); // Reapply the old settings. printSource.PageHeight = pageHeight; printSource.PageWidth = pageWidth; printSource.PagePadding = pagePadding; printSource.ColumnGap = columnGap; printSource.ColumnWidth = columnWidth; PrintPreviewWindow printPreview = new PrintPreviewWindow(); printPreview.Width = this.ActualWidth; printPreview.Height = this.ActualHeight; printPreview.Owner = Application.Current.MainWindow; printPreview.LoadDocument(xpsDocument, package, packageUriString); printPreview.Show(); }
private void OnPrintPreview(object sender, ExecutedRoutedEventArgs e) { PrintDialog printDialog = new PrintDialog(); printDialog.PageRangeSelection = PageRangeSelection.AllPages; printDialog.UserPageRangeEnabled = true; bool? dialogResult = printDialog.ShowDialog(); if (dialogResult != null && dialogResult.Value == false) { return; } FlowDocument printSource = this.CreateFlowDocumentForEditor(); // Save all the existing settings. double pageHeight = printSource.PageHeight; double pageWidth = printSource.PageWidth; Thickness pagePadding = printSource.PagePadding; double columnGap = printSource.ColumnGap; double columnWidth = printSource.ColumnWidth; // Make the FlowDocument page match the printed page. printSource.PageHeight = printDialog.PrintableAreaHeight; printSource.PageWidth = printDialog.PrintableAreaWidth; printSource.PagePadding = new Thickness(20); printSource.ColumnGap = Double.NaN; printSource.ColumnWidth = printDialog.PrintableAreaWidth; Size pageSize = new Size(printDialog.PrintableAreaWidth, printDialog.PrintableAreaHeight); MemoryStream xpsStream = new MemoryStream(); Package package = Package.Open(xpsStream, FileMode.Create, FileAccess.ReadWrite); string packageUriString = "memorystream://data.xps"; PackageStore.AddPackage(new Uri(packageUriString), package); XpsDocument xpsDocument = new XpsDocument(package, CompressionOption.Normal, packageUriString); XpsDocumentWriter writer = XpsDocument.CreateXpsDocumentWriter(xpsDocument); DocumentPaginator paginator = ((IDocumentPaginatorSource)printSource).DocumentPaginator; paginator.PageSize = pageSize; paginator.ComputePageCount(); writer.Write(paginator); // Reapply the old settings. printSource.PageHeight = pageHeight; printSource.PageWidth = pageWidth; printSource.PagePadding = pagePadding; printSource.ColumnGap = columnGap; printSource.ColumnWidth = columnWidth; PrintPreviewWindow printPreview = new PrintPreviewWindow(); printPreview.Width = this.ActualWidth; printPreview.Height = this.ActualHeight; printPreview.Owner = Application.Current.MainWindow; printPreview.LoadDocument(xpsDocument, package, packageUriString); printPreview.Show(); }