diff --git a/PrintPreview.png b/PrintPreview.png new file mode 100644 index 0000000..2c68c69 Binary files /dev/null and b/PrintPreview.png differ diff --git a/README.md b/README.md index 6cb8c5a..bd6e08a 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,92 @@ -# How to print wpf treegrid with pdfviewercontrol? -This sample illustrates how to print wpf treegrid with pdfviewercontrol +# How to Print WPF TreeGrid with PdfViewerControl? + +This sample illustrates how to print [WPF TreeGrid](https://www.syncfusion.com/wpf-controls/treegrid) (SfTreeGrid) with [PdfViewerControl](https://help.syncfusion.com/wpf/pdf-viewer/printing-pdf-files). + +The printing feature can be achieved by exporting the **TreeGrid** to PDF and printing the exported PDF using the **PdfViewerControl**. + +``` c# +var options = new TreeGridPdfExportingOptions(); +FileStream fileStream = new FileStream("Sample.pdf", FileMode.Create); +var document = treeGrid.ExportToPdf(options); +MemoryStream stream = new MemoryStream(); +document.Save(stream); +PdfViewerControl pdfViewer = new PdfViewerControl(); +pdfViewer.Load(stream); +Window window = new Window(); +window.Content = pdfViewer; +window.Loaded += Window_Loaded; +window.Show(); + +private void Window_Loaded(object sender, RoutedEventArgs e) +{ + var toolbar = pdfViewer.Template.FindName("PART_Toolbar", pdfViewer) as DocumentToolbar; + // Get an instance of the open and save file buttons using its template name. + Button openButton = (Button)toolbar.Template.FindName("PART_ButtonOpen", toolbar); + Button saveButton = (Button)toolbar.Template.FindName("PART_ButtonSave", toolbar); + + // Set visibility of the button to collapsed. + openButton.Visibility = System.Windows.Visibility.Collapsed; + saveButton.Visibility = Visibility.Collapsed; +} +``` + +![Printing TreeGrid with PdfViewerControl](PrintPreview.png) + +### Print Parent and Expanded Child Nodes: + +You can print only the parent and expanded child nodes by overriding the [ExportNodesToPdf](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.TreeGrid.Converter.TreeGridToPdfConverter.html#Syncfusion_UI_Xaml_TreeGrid_Converter_TreeGridToPdfConverter_ExportNodesToPdf_Syncfusion_UI_Xaml_TreeGrid_SfTreeGrid_Syncfusion_UI_Xaml_TreeGrid_TreeNodes_Syncfusion_Pdf_Grid_PdfGrid_Syncfusion_UI_Xaml_TreeGrid_Converter_TreeGridPdfExportingOptions_) method of the [TreeGridToPdfConverter](https://help.syncfusion.com/cr/wpf/Syncfusion.UI.Xaml.TreeGrid.Converter.TreeGridToPdfConverter.html) class. + +``` csharp +var options = new TreeGridPdfExportingOptions(); +options.AllowIndentColumn = true; +options.FitAllColumnsInOnePage = true; +var document = treeGrid.ExportToPdf(options, true); +PdfViewerControl pdfViewer = new PdfViewerControl(); +MemoryStream stream = new MemoryStream(); +document.Save(stream); +PdfLoadedDocument ldoc = new PdfLoadedDocument(stream); +pdfViewer.Load(ldoc); +// If you want to show the pdf viewer window, enable the following line. +MainWindow pdfPage = new MainWindow(); +pdfPage.Content = pdfViewer; +pdfPage.Show(); +pdfViewer.Print(true); + +public class TreeGridCustomPdfConverter : TreeGridToPdfConverter +{ + internal bool _excludeNonExpandedNodes; + + public TreeGridCustomPdfConverter(bool excludeNonExpandedNodes) :base() + { + _excludeNonExpandedNodes = excludeNonExpandedNodes; + } + + /// + /// ExportNodes to PDF + /// + /// + /// + /// + /// + protected override void ExportNodesToPdf(SfTreeGrid treeGrid, TreeNodes nodes, PdfGrid pdfGrid, TreeGridPdfExportingOptions pdfExportingOptions) + { + if (!_excludeNonExpandedNodes) + { + base.ExportNodesToPdf(treeGrid, nodes, pdfGrid, pdfExportingOptions); + } + else + { + for (int i = 0; i < nodes.Count; i++) + { + TreeNode node = nodes[i]; + ExportNodeToPdf(treeGrid, node, pdfGrid, pdfExportingOptions); + if (node.IsExpanded && node.HasChildNodes) + { + node.PopulateChildNodes(); + ExportNodesToPdf(treeGrid, node.ChildNodes, pdfGrid, pdfExportingOptions); + } + } + } + } +} +``` \ No newline at end of file