Bonjour,
Je sais qu'en raison des différences de marges physiques et de résolution (dpi) d'une imprimante à l'autre, je cherche à faire en sorte que mon imprimé ait une position absolue par rapplrt à la marge de gauche et à la marge inférieure quel que soit le périphérique vers lequel j'envoie mon PrintDocument.
Le code qui suit m'a l'air OK pour obtenir les marges physiques de l'imprimante:
Cependant, pour m'assurer que la position d'un rectangle hypothétique que je veux placer dans le coin supérieur gauche de ma page soit exactement au même endroit peu importe l'imprimante et sa résolution...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 Dim marge_physique_gauche As Single Dim marge_physique_haute As Single Dim dpiX As Integer Dim dpiY As Integer 'API de lecture des capacités de l'imprimante Private Declare Function GetDeviceCaps Lib "gdi32.dll" (ByVal hdc As IntPtr, ByVal capIndex As Int32) As Int32 Private Const LOGPIXELSX As Integer = 88 Private Const LOGPIXELSY As Integer = 90 Private Const PHYSICALOFFSETX As Integer = 112 Private Const PHYSICALOFFSETY As Integer = 113 'on récupere les marges physiques de l'imprimante Dim hdc As IntPtr = e.Graphics.GetHdc dpiX = GetDeviceCaps(hdc, LOGPIXELSX) 'résolution horizontale dpiY = GetDeviceCaps(hdc, LOGPIXELSY) 'résolution verticale marge_physique_gauche = (GetDeviceCaps(hdc, PHYSICALOFFSETX)) / dpiX * 100 marge_physique_haute = (GetDeviceCaps(hdc, PHYSICALOFFSETY)) / dpiY * 100 e.Graphics.ReleaseHdc(hdc)
...je cherche un algo permettant de calculer un point X,Y de départ qui ne «bougera» pas selon que je l'imprime sur un périphérique gérant une résolution de 1200x1200 dpi ou sur une imprimante à jet d'encre à 360x260 dpi. Quelqu'un a-t-il une idée?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 e.Graphics.FillRectangle(Brushes.Blue, New Rectangle(??,??,<la largeur>,<la hauteur>)
Merci!
Partager