Il s'agit de techniques que j'ai apprises au travers d'un ouvrage écrit par l'excellent programmeur Karli Watson, membre du Wrox Team.
Cet exemple, conçu à ma sauce montre comment imprimer le contenu d'un RichTextBox, comment n'imprimer que le texte sélectionné par le biais de la boîte de dialogue imprimer, comment gérer l'impression sur plusieurs pages, comment récupérer les préférences de mise en page, comme les marges, définies par l'utilisateur sur la boîte de dialogue mise en page et aussi comment afficher un aperçu avant impression...
Plusieurs contrôles sont nécessaires comme l'indispensable PrintDocument dont les gestionnaires PrintPage() et BeginPrint() gèrent l'essentiel des tâches d'impression.
BeginPrint() ne se produit qu'une fois, au début de l'impression. C'est donc ici qu'on effectue les tâches de traitement de chaîne avant de commander l'impression.
EXTRAIT:
private string[] lignes;
...
char[] saut = {'\n'};
lignes = Page.SelectedText.Split(saut);
Dans cet exemple Page est le contrôle RichTextBox. Le texte qu'il contient est d'abord fractionné (Split()), en tableau de chaînes au niveau du saut de ligne ('\n').
L'impression quant à elle est gérée par PrintPage(), une fois toutes les préférences recensées:
...
int x =e.MarginBounds.Left;
int y =e.MarginBounds.Top;
//Dessine chaque ligne
while(lignesImprime < lignes.Length)
{
e.Graphics.DrawString(lignes[lignesImprime++], new Font("Arial",10), Brushes.Black, x, y);
y += 15;
...
Les marges étant définies selon les choix utilisateurs sur la boîte Mise en Page (x et y), la méthode DrawString() permet de dessiner (Imprimer) chaque ligne fractionnée (...DrawString(lignes[lignesImprime++]...), selon la police définie.
L'aperçu est très simple. On utilise un PrintPreviewDialog rattaché au PrintDocument à l'aide de sa propriété Document et on commande l'affichage de l'aperçu:
dlgApercu.ShowDialog();
Voilà, personnellement j'ai toujours trouvé que l'impression était une tâche délicate. Mais décortiqué comme cela, la vie devient plus simple...
Hope this help !!