public partial class PrintVisual : System.Windows.Window
{
public PrintVisual()
{
InitializeComponent();
}
private void cmdPrint_Click(object sender, RoutedEventArgs e)
{
PrintDialog printDialog = new PrintDialog();
if (printDialog.ShowDialog() == true)
{
// Scale the TextBlock in both dimensions.
double zoom;
if (Double.TryParse(txtScale.Text, out zoom))
{
grid.Visibility = Visibility.Hidden;
// Add a background to make it easier to see the canvas bounds.
canvas.Background = Brushes.LightSteelBlue;
// Resize it.
canvas.LayoutTransform = new ScaleTransform(zoom / 100, zoom / 100);
// Get the size of the page.
Size pageSize = new Size(printDialog.PrintableAreaWidth, printDialog.PrintableAreaHeight);
// Trigger the sizing of the element.
canvas.Measure(pageSize);
canvas.Arrange(new Rect(10, 10, pageSize.Width - 20, pageSize.Height - 20));
// Print the element.
printDialog.PrintVisual(canvas, "A Scaled Drawing");
// Reset the canvas.
canvas.Background = null;
canvas.LayoutTransform = null;
grid.Visibility = Visibility.Visible;
}
else
{
MessageBox.Show("Invalid scale value.");
}
}
}
}
PrintVisual in WPF
{pdf}
http://pic.ipicture.ru/uploads/090417/eSRQuLf4Bj.jpg
{xps}
http://pic.ipicture.ru/uploads/090417/0VRwsmFUWB.jpg
[HTML]<Window x:Class="Printing.PrintVisual"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="PrintVisual" Height="259" Width="282"
>
<Grid Margin="5" Name="grid">
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<Canvas Name="canvas">
<TextBlock Canvas.Top="50" Canvas.Left="20" FontSize="25" FontWeight="Bold">Hello There</TextBlock>
<Path Fill="Yellow" Stroke="Blue" Margin="5" Canvas.Top="10" Canvas.Left="10" >
<Path.Data>
<GeometryGroup>
<RectangleGeometry Rect="0 0 100 100"></RectangleGeometry>
<EllipseGeometry Center="50 50" RadiusX="35" RadiusY="25"></EllipseGeometry>
</GeometryGroup>
</Path.Data>
</Path>
</Canvas>
<StackPanel Orientation="Horizontal" Grid.Row="1">
<Label>Scale Percentage:</Label>
<TextBox MinWidth="50" Name="txtScale">500</TextBox>
</StackPanel>
<Button Grid.Row="3" Click="cmdPrint_Click">Print</Button>
</Grid>
</Window>[/HTML]
Код: