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 !!
31 oct. 2006 à 16:35
18 sept. 2006 à 00:01
Marcel
8 nov. 2005 à 10:08
merci pour ce code il confirme ce que j'avais trouvé sur d'autres sites mais cela ne fonctionne pas avec mon imprimante: Datamax M-4206. Au lieu de m'imprimer les différentes pages de mon document, il m'imprime la première page autant de fois qu'il y a de pages dans mon document.
Pourtant si je fais un document de plusieurs pages avec le bloc notes de windows ca fonctionne très bien. Je ne comprend pas pourquoi!
Si quelqu'un a une idée merci de m'aider.
23 avril 2005 à 13:40
Merci !
9 avril 2005 à 17:14
PS: Pourquoi quand on note qqch dans le richtextbox puis qu'on fait un aperçu ou qu'on imprime tout se réaligne sur la gauche ?
A ++.
Encore MERCI !
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.