Cours pdf l’impression sous Visual Basic

Cours pdf l’impression sous Visual Basic, tutoriel & guide de travaux pratiques en pdf.

L’objet printer à terre

En lui-même, cet objet est très simple. Il est membre de la collection Printers, qui représente l’ensemble des imprimantes disponibles sur le système.
Regardons d’abord ses propriétés en les rangeant en deux catégories. Celles que l’on utilise en configuration, et celles dont on se sert au cours de l’impression. La notation (RcdImp) signifie qu’on valorise la propriété en général lors de la récupération de la boite de dialogue impression. Cette liste n’est pas exhaustive.
N.B : Dans cet article nous utiliserons le terme méthode graphique pour toutes les impressions qui ne sont pas du texte. (Ex : Circle, Line, PaintPicture…).

Configuration

  • ColorMode : Défini si une imprimante couleur imprime ou non en couleur.
  • Copies (RcdImp) : Nombre de copies
  • Duplex : Impression recto verso
  • Height, Width : Servent à connaître les dimensions de la feuille. Utilisez les seulement en lecture, afin de ne pas modifier la propriété PaperSize implicitement, ce qui risquerait de provoquer une erreur.
  • Orientation (RcdImp) : Portrait ou paysage.
  • PaperSize : Taille du papier. Dans cet article, tout sera construit autour du format A4.
  • PrintQuality : Qualité de l’impression, va de brouillon à haute.
  • ScaleMode : Unité de l’échelle. Par habitude j’utilise toujours 6 – Millimeter. Cette propriété est très importante, car elle va permettre de contrôler la position exacte de l’impression. Il est donc fortement conseillé de la définir au début et de ne plus la modifier.
  • ScaleLeft, ScaleTop, ScaleHeight, ScaleWidth, sont des propriétés utilisées pour connaître la zone imprimable, comme nous le verrons dans les exemples.

Impression

  • DrawMode, DrawStyle, DrawWidth sont des propriétés de traçage des méthodes graphiques telles que l’épaisseur du trait, pointillés etc…
  • FillColor et FillStyle sont des propriétés de remplissage des méthodes graphiques.
  • Font, FontBold, FontItalic, FontStrikethru, FontUnderline, FontSize, FontName sont les propriétés de police du texte.
  • CurrentX, CurrentY sont les propriétés de position d’impression. Elles définissent le coin supérieur gauche du début de l’impression. Elles sont fondamentales à l’écriture d’un gestionnaire d’impression réussie, mais j’y reviendrai largement dans la deuxième partie. CurrentX augmente de la gauche vers la droite, et CurrentY du haut vers le bas.

Nous allons voir maintenant les méthodes, celles ci s’utilisent toujours au cours de l’impression.

  • printer.Circle [Step] (x, y), radius, [color, start, end, aspect] Trace un cercle, un arc de cercle ou une ellipse. Le mot clé Step précise si les coordonnées du centre sont relatives (à la position currentX, currentY) ou absolu ; color permet de forcer une couleur différente de celle définit dans FillColor ; start, end servent pour les arcs, et aspect pour définir s’il s’agit d’un cercle ou d’une ellipse.
  • printer.Line [Step] (x1, y1) [Step] – (x2, y2), [color], [B][F] Trace une ligne ou un rectangle. Le premier mot clé Step définit si les coordonnées (x1 , y1) sont relatives au point (currentX, currentY) le deuxième si les coordonnées (x2, y2) sont relatives au point ( x1, y1 ). [B] annonce le tracé d’un rectangle en fonction des coordonnées. [F] annonce que ce rectangle est rempli par la même couleur que le contour. S’il est omis, le rectangle est rempli selon les valeurs des propriétés FillStyle et FillMode. N.B : Les propriétés CurrentX et currentY prennent les coordonnées (x2, y2) après le tracé de la ligne.
  • printer.PSet [Step] (x, y), [color]
  • printer.PaintPicture picture, x, y Imprime un graphique. Picture doit correspondre à la propriété picture d’un PictureBox, d’une form ou d’un objet particulier. (Nous verrons cela plus loin).
  • TextHeight et TextWidth permettent de déterminer la hauteur ou la largeur dans le système d’unité ScaleMode. Elle attend la chaîne à imprimer en paramètre.
  • EndDoc met fin au travail d’impression et envoie le document vers le périphérique.
  • KillDoc annule l’impression en cours, rien n’est envoyé au périphérique.
  • NewPage avance jusqu’à la page suivante de l’imprimante et redéfinit la position d’impression dans l’angle supérieur gauche de la nouvelle page, elle incrémente de 1 la propriété Page. Attention après l’appel de méthode, il n’est plus possible de modifier ou de revenir sur la page précédente.
  • Scale, ScaleX et ScaleY permettent de redéfinir le système d’échelle.

Et enfin la méthode Print. Elle est bizarrement documentée. Pour trouver comment elle fonctionne, il faut rechercher « printer.print » dans l’aide car vous ne la trouverez pas dans les méthodes de l’objet printer(??). Pour vous évitez cette recherche son modèle est le suivant :

  • [object.]Print [outputlist] [{ ; | , }]
  • outputlist contient donc une liste de chaînes séparées par des’ ,’ ou des ‘;’ .

Sachez enfin qu’elle provoque une erreur si elle est placée dans un bloc With.
L’objet printer ne gère pas d’événement.
Comme vous le voyez, il n’y a pas beaucoup de propriétés et de méthodes, et pourtant nous allons réaliser des impressions complètes avec uniquement cet objet.

Le système de coordonnées

Il faut connaître quelques astuces pour ne pas se faire berner par l’objet printer.

Les marges

Tout d’abord, une imprimante ne peut pas imprimer partout sur la feuille. Elle possède un système de marge propre à chaque imprimante. Ceci fait que le point de coordonnées (0,0) de l’imprimante n’est pas celui de la feuille. Pour déterminer par exemple la coordonnée absolue du point(0,0) il faut faire : Xdemar=(Printer.Width-Printer.ScaleWidth)/2Ydemar=(Printer.Heigth-Printer.ScaleHeigth)/2
On a toujours intérêt à définir une marge supérieure à la « marge imprimante ». Par habitude j’utilise toujours dans mes impressions portrait des marges gauche/droite égales à 20 (en mm) et des marges haute/basse égales à 15.
Donc dans mon programme on trouvera toujours le code suivant :

  • Printer.TrackDefault = True
  • Printer.ScaleMode = 6
  • Printer.Orientation = 1
  • Printer.PaperSize = 9
  • Printer.PrintQuality = -4
  • Printer.ColorMode = 1
  • DecalX =20-(Printer.Width-Printer.ScaleWidth)/2
  • DecalY =15-(Printer.Heigth-Printer.ScaleHeigth)/2

L’impression d’une chaîne

Ce qui m’a le plus perturbé, la première fois que j’ai écrit un gestionnaire d’impression, c’est la façon dont fonctionne les propriétés currentX et currentY. En effet, globalement cela fonctionne comme une machine à écrire. L’impression d’une ligne ou d’un cadre donne à ces propriétés les valeurs de leurs points de fin (x2, y2). L’impression d’une chaîne dépend de la syntaxe. Pour faire simple je vais utiliser un exemple :
Si j’écris Printer.Print MaChaine la propriété currentX prend la valeur 0, et currentY augmente de la valeur
TextHeight du texte plus 0.1 mm, bref c’est un retour à la ligne. Ce qui nous montre aussi que la valeur
TextHeight n’est pas stricto sensu la hauteur du texte, mais la hauteur du texte plus un interligne.
Par contre si j’écris Printer.Print MaChaine; la propriété currentX augmente de la valeur TextWidth, et CurrentY reste identique. Ceci fait que le simple fait d’encadrer un texte juste après l’avoir écris ressemble rapidement à un travail de polytechnicien.

Le changement de page

L’impression d’une chaîne en dehors des marges intrinsèques de l’objet printer déclenche l’appel de la méthode NewPage, et tout ou partie de la chaîne sera imprimée sur une nouvelle page. Par contre, pour les méthodes graphiques, tout ce qui sortira des marges pourra être considéré comme définitivement perdu. Nous verrons plus loin comment éviter ces inconvénients.

Cours gratuitTélécharger le cours complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *