Publié dimanche 6 décembre 2009 22:45 par Audrey

[Silverlight] L'impression avec Silverlight 4

Suite aux annonces de la PDC09, Silverlight 4 permet maintenant d'imprimer. Cette fonctionnalité est très importante pour les applications métiers et souvent cette fonctionnalité est incontournable pour un client : pouvoir imprimer un rapport, un graphique, etc...

Cette fonctionnalité est toute simple mais tellement importante !

Voici 3 cas d'utilisation :

  • Impression de l'écran :

Pour notre exemple, voici l'interface de l'application :




Le code XAML :

1
2
3
4
5
6
7
8
9
10
<Grid x:Name="LayoutRoot" Height="447" Width="637" >
<Grid.Background>
<ImageBrush ImageSource="/SL4Print;component/Images/blue_tiles.jpg" />
</Grid.Background>
<StackPanel Height="173" HorizontalAlignment="Center" Margin="108,140,104,0" Name="stackPanel1" VerticalAlignment="Top" Width="425" Orientation="Horizontal">
<Image Height="150" Name="image1" Stretch="Fill" Width="200" Margin="5" Source="/SL4Print;component/Images/Desert.jpg" />
<Image Height="150" Name="image2" Stretch="Fill" Width="200" Margin="5" Source="/SL4Print;component/Images/Chrysanthemum.jpg" />
</StackPanel>
<Button Content="Imprimer" Height="39" HorizontalAlignment="Center" Margin="200,345,335,0" Name="button1" VerticalAlignment="Top" Width="102" Click="button1_Click" />
</Grid>


Le code-behind pour l'impression :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public MainPage()
{
InitializeComponent();
myPrintDoc.PrintPage += new EventHandler<PrintPageEventArgs>(myPrintDoc_PrintPage);
}


void myPrintDoc_PrintPage(object sender, PrintPageEventArgs e)
{
e.PageVisual = stackPanel1;
e.HasMorePages = false;
}


PrintDocument myPrintDoc = new PrintDocument();

private void button1_Click(object sender, RoutedEventArgs e)
{
myPrintDoc.DocumentName = "monDoc";
myPrintDoc.Print();
}


Dans le MainPage, il est important de s'abonner à l'évènement PrintPage afin de pouvoir définir ce que l'on souhaite imprimer.

L'élément essentiel est le PrintDocument qui est la nouvelle classe d'impression pour Silverlight 4, grâce à elle, on peut désormais déclarer un document qui va nous permettre de gérer l'impression, ici "myPrintDoc".

Dans la méthode "button1_click" (liée à l'évènement click du bouton "Imprimer"), on donne un nom à "myPrintDoc" qui sera le nom proposé par défaut lors de l'impression via une imprimante virtuelle (type PDF, XPS, etc...). Et ensuite, la méthode "Print" est appelée pour lancer l'impression.

L'événement PrintPage est alors levé, et la méthode "myPrintDoc_PrintPage" est appelée. C'est ici qu'il est important de bien préciser ce que l'on souhaite imprimer dans la propriété PageVisual, qui prend un UIElement comme valeur. Dans notre exemple, nous allons lui donner "LayoutRoot" qui est la Grid qui contient toute notre interface. De plus, la propriété HasMorePage, permet d'indiquer si d'autres pages doivent être imprimer ou non. Dans notre cas, nous n'avons qu'une seule page à imprimer, par conséquent HasMorePage est à false.

Et voici le résultat :

 

  • Impression d'une partie de l'écran

Il est possible de n'imprimer qu'une partie de l'interface en précisant le nom de l'UIElement à imprimer, ici nous allons mettre "stackPanel1" qui contient les 2 images dans la propriété PageVisual, afin de ne pas avoir l'image de fond et le bouton Imprimer sur notre impression.

Voici le résultat :

 

  • Modèle d'impression

Il est possible de définir un modèle d'impression afin d'organiser les éléments que l'on souhaite imprimer d'une manière différente de celle qui est présentée à l'écran et de rajouter des éléments non présents sur l'interface. Pour cela il faut créer une arborescence d'UIElement dans l'événement PrintPage et de renseigner le nom de l'UIElement racine à la propriété PageVisual pour l'impression.

Le code-behind de notre exemple :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
void myPrintDoc_PrintPage(object sender, PrintPageEventArgs e)
{
StackPanel stackPrint = new StackPanel()
{
Width = e.PrintableArea.Width,
Height = e.PrintableArea.Height,
Orientation = Orientation.Vertical,
Background = new SolidColorBrush(Colors.LightGray)
};


stackPrint.Measure(e.PrintableArea);

printImage(stackPrint, image1);
printImage(stackPrint, image2);


TextBlock txtBlock = new TextBlock();
txtBlock.Text = "Test Imprim Custom";
txtBlock.HorizontalAlignment = HorizontalAlignment.Center;

stackPrint.Children.Add(txtBlock);


e.PageVisual = stackPrint;
e.HasMorePages = false;
}


private void printImage(StackPanel stackPrint, Image myImage)
{
Rectangle rect = new Rectangle()
{
Width = myImage.Width,
Height = myImage.Height,
Margin = new Thickness(10),
Fill = new ImageBrush()
{
ImageSource = myImage.Source
}
};


stackPrint.Children.Add(rect);
}

L'élément StackPanel "stackPrint" est l'UIElement parent qui va contenir les 2 images et un TextBlock en plus.

Le résultat :

Bonne impression à tous ! Smile

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Classé sous , ,

Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01