Comment imprimer

Pour imprimer quelque chose en Gambas 3, il vous faut :

  • Créer un nouvel objet Printer.

  • Permettre à l’utilisateur de le configurer par appel de la Méthode Printer.Configure.

  • Démarrer l’impression par appel de la méthode Printer.Print.

Le processus d’impression

Quand la méthode d’impression est en cours, une boucle d’évènement local tourne et la méthode ne renvoit que lorsque l’impression est terminée ou avortée.

Au cours de cette boucle d’évènement local, les évènements suivants sont levés :

Vous devez implémenter l’évènement draw. Tous les autres évènements sont optionnels.

L’évènement Begin (commence)

Cet évènement est levé quand l’impression débute.

Vous pouvez définir ici la propriété Printer.Count si vous savez combien de pages vous devez imprimer.

Sinon, il vous faut implémenter l’évènement de pagination pour disposer votre document et calculer le décompte des pages.

Par défaut, une seule page est imprimée.

L’évènement Paginate (pagination )

Cet évènement est levé pour que vous puissiez paginer votre document en tâche de fond.

Si vous ne définissez pas de gestionnaire d’évènement, cet évènement ne sera pas levé, et vous devrez définir la propriété Count dans le gestionnaire d’évènement de Begin.

A contrario, si vous prenez en charge cet évènement, le gestionnaire d’événement sera appelé indéfiniment, jusqu’à ce que vous définissiez explicitement la propriété count.

L’évènement Draw (tracé)

Cet évènement est appelé une fois par page à imprimer.

Le numéro de page en cours est retourné par la Printer.Page.

Tout dessin est réalisé en recourant à la classe Paint.

L’évènement End (fin)

Cet évènement est levé quand le processus d'impression est terminé.

Comment dessiner une Page

Dimensions de Page

Le tracé est réalisé à l’intérieur d’un rectangle représentant la page avec ou sans marges. L’origine du rectangle est (0, 0), et la taille du rectangle est (Paint.Width, Paint.Height).

Marges d’impression

Les imprimantes ne peuvent généralement pas imprimer sur toute la page, c. à d. qu’il y a une marge dans laquelle vous ne pouvez pas imprimer.

Le rectangle précédent ne représente la page entière que si la propriété Printer.FullPageest fixée. Sinon, les marges sont prises en compte.

Vous devez en tenir compte lors de la conception de votre impression !

Je suggère fortement de toujours imprimer avec Printer.FullPage fixé, et de laisser l’utilisateur choisir ses propres marges à partir des bords de la page, pour qu’il obtienne exactement ce qu’il veut.

Coordonnées absolues

Au lieu d’employer les coordonnées du dessin, vous préférez habituellement des coordonnées en centimètres.

Pour cela, vous devez employer les propriétés Printer.PaperWidth et Printer.PaperHeight qui retournent la taille du papier en millimètres.

Vous pouvez ensuite utiliser la méthode Paint.Scale pour mettre à l’échelle les coordonnées système de façon à ce que toutes les coordonnées que vous spécifiez soient à présent en millimètres :

Dim MonImprimante As Printer

MonImprimante = New Printer As "MonImprimante"

...

Public Sub MonImprimante_Draw()

  Paint.Scale(Paint.Width / MonImprimante.PaperWidth , Paint.Height / MonImprimante.PaperHeight)
  ...

End

Taille de police de caractères

ATTENTION: la taille de police, telle que la retourne Paint.Font.Size, est une taille absolue.

Son unité est le point typographique.

Un point typographique vaut 1/72 de pouce, c.à.d. environ 0,353 mm.

En conséquence, si une police de 10 points est une bonne taille pour afficher du texte à l’écran, elle ne sera pas très grande sur le papier : La résolution de l’imprimante est largement plus grande que celle des écrans, vous imprimez habituellement des choses plus petites.

MAIS : La taille de police peut être modifiée en fonction de la matrice paint (c. à d. lorsque vous employez Paint.Scale, Paint.Translate, Paint.Rotate...)

Il y a un exemple d’impression fourni avec Gambas, qui montre l’essentiel des concepts exposés.