1. Normal Printing
Printing in WPF is easy as compare to other window printing. Here in this we have to show the PrintDialog and call the PrintVisual method of the PrintDialog. This example has been shown in the btnPrint_OnClick event handler.
PrintDialog printDlg = new System.Windows.Controls.PrintDialog();
if (printDlg.ShowDialog() == true)
{
printDlg.PrintVisual(this, "WPF Print");
}
2. Print to Fit Window
Now if you want to fit your visual to fit into the print page then you have to do little more coding.
- Add Reference the ReachFramework.dll.
- Add reference of the System.Printing.dll.
- Get the capabilities of the selected printer.
- Calculate the scaling of the printer with w.r.t. to visual to be printed.
- Transform the visual to be printed to the calculated scale.
- Get the printable area of the paper size.
- Update the layout of the visual to the printable area.
- Print the visual.
Code: This code in the sample is called in the btnPrintFit_OnClick handler.
PrintDialog printDlg = new System.Windows.Controls.PrintDialog();
if (printDlg.ShowDialog() == true)
{
//get selected printer capabilities
System.Printing.PrintCapabilities capabilities = printDlg.PrintQueue.GetPrintCapabilities(printDlg.PrintTicket);
//get scale of the print wrt to screen of WPF visual
double scale = Math.Min(capabilities.PageImageableArea.ExtentWidth / this.ActualWidth, capabilities.PageImageableArea.ExtentHeight /
this.ActualHeight);
//Transform the Visual to scale
this.LayoutTransform = new ScaleTransform(scale, scale);
//get the size of the printer page
Size sz = new Size(capabilities.PageImageableArea.ExtentWidth, capabilities.PageImageableArea.ExtentHeight);
//update the layout of the visual to the printer page size.
this.Measure(sz);
this.Arrange(new Rect(new Point(capabilities.PageImageableArea.OriginWidth, capabilities.PageImageableArea.OriginHeight), sz));
//now print the visual to printer to fit on the one page.
printDlg.PrintVisual(this, "First Fit to Page WPF Print");
}
Summary
Using WPF you can print any visual element in
the normal way or to fit on the page easily.
Akhilesh Kumar SahuPosted Apr 14, 2018, 9:59 AM
But let s suppose that my screen has 2 group boxes inside one box i have the input controls and other groupbox has to show the data , and i wanted to print the only second groupbox which shows the data , then what do i need to do.