Created
July 31, 2015 09:51
-
-
Save huoxudong125/e6fe3bdbe1bd44cd095a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private void Print(Visual v) | |
{ | |
System.Windows.FrameworkElement e = v as System.Windows.FrameworkElement ; | |
if (e == null) | |
return; | |
PrintDialog pd = new PrintDialog(); | |
if (pd.ShowDialog() == true) | |
{ | |
//store original scale | |
Transform originalScale = e.LayoutTransform; | |
//get selected printer capabilities | |
System.Printing.PrintCapabilities capabilities = pd.PrintQueue.GetPrintCapabilities(pd.PrintTicket); | |
//get scale of the print wrt to screen of WPF visual | |
double scale = Math.Min(capabilities.PageImageableArea.ExtentWidth / e.ActualWidth, capabilities.PageImageableArea.ExtentHeight / | |
e.ActualHeight); | |
//Transform the Visual to scale | |
e.LayoutTransform = new ScaleTransform(scale, scale); | |
//get the size of the printer page | |
System.Windows.Size sz = new System.Windows.Size(capabilities.PageImageableArea.ExtentWidth, capabilities.PageImageableArea.ExtentHeight); | |
//update the layout of the visual to the printer page size. | |
e.Measure(sz); | |
e.Arrange(new System.Windows.Rect(new System.Windows.Point(capabilities.PageImageableArea.OriginWidth, capabilities.PageImageableArea.OriginHeight), sz)); | |
//now print the visual to printer to fit on the one page. | |
pd.PrintVisual(v, "My Print"); | |
//apply the original transform. | |
e.LayoutTransform = originalScale; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment