It's so easy to enable printing from a Silverlight 4 application
I've been a writer with Microsoft for about 5 years now, and I've seen my share of printing API. I am happy to report that using the Silverlight printing API to print a single page is about as easy as it gets. Printing multiple pages is a bit more complex, and something I’ll cover in a future blog post. For the most part, however, if you are familiar with the how to print from a Windows Forms application, you'll be very comfortable with printing from Silverlight.
The heart of printing from Silverlight is the PrintDocument type. You use it to raise a print dialog, with the Print method and drive the actual print operation by handling the PrintPage event. Within your PrintPage event handler you specify the UIElement you want to print. This could be the layout root of the Silverlight app, meaning it would print the entire Silverlight UI, or a subset of the UI. Here's some sample code.
<StackPanel x:Name="LayoutRoot">
<Button Margin="5" Width="200" Content="Click to print" x:Name="PrintButton"
Click="PrintButton_Click" />
<Image Width="600" Height="600" Source="RedmondMap.jpg" x:Name="mapImage"/>
</StackPanel>
In the above xaml, I’ve declared a button and an image. In the code below, I declare the PrintDocument object and the handler for the button’s click event opens the print dialog by calling Print on the PrintDocument. In the PrintPage event handler, I set the PageVisual property of the PrintEventArgs to the image object, which contains a map, to print it.
PrintDocument pd = new PrintDocument();
public MainPage()
{
InitializeComponent();
pd.PrintPage += new EventHandler<PrintPageEventArgs>(pd_PrintPage);
}
private void PrintButton_Click(object sender, RoutedEventArgs e)
{
pd.DocumentName = "My Map";
// Open the print dialog.
pd.Print();
}
void pd_PrintPage(object sender, PrintPageEventArgs e)
{
// Set the UI element to print.
e.PageVisual = mapImage;
}
For more details see the printing overview topic and the reference documentation for PrintDocument and its supporting classes.
Comments
Anonymous
February 02, 2010
It's good see you've added this to Silverlight, Cheryl. I've tried to print silverlight apps before.Anonymous
January 01, 2011
How to print out a form that format, does this need to draw out their ownAnonymous
January 01, 2011
For example,remove from the oracle data into the form, then print out the form and dataAnonymous
July 09, 2011
But its quite difficult for print preview.