Hallo,
Ik ben bezig met een C# project waarbij er overzichten afgedrukt moeten worden. Om zo optimaal mogelijk gebruik te maken van het papier wil ik de maximale marges van de gekozen printer bepalen. Ik heb de volgende code maar dit lijkt niet te werken.
Dit wordt aangeroepen met de volgende code:
Als ik de marges uit PrintPageEventArgs met MarginBounds probeer te halen blijft de marge bij iedere printer gelijk (bij bovenstaande code ook).
Ik maakt trouwens een PrintDocument aan om afdrukken te maken.
Wie weet een methode waarmee de echte marge van een printer bepaald kan worden?
Ik ben bezig met een C# project waarbij er overzichten afgedrukt moeten worden. Om zo optimaal mogelijk gebruik te maken van het papier wil ik de maximale marges van de gekozen printer bepalen. Ik heb de volgende code maar dit lijkt niet te werken.
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| using System; using System.Drawing; using System.Drawing.Printing; using System.Runtime.InteropServices; namespace Calculatie.Library { public class PrinterBounds { [DllImport("gdi32.dll")] private static extern Int32 GetDeviceCaps(IntPtr hdc, Int32 capindex); private const int PHYSICALOFFSETX = 112; private const int PHYSICALOFFSETY = 113; public readonly Rectangle Bounds; public readonly int HardMarginLeft; public readonly int HardMarginTop; public PrinterBounds(PrintPageEventArgs e) { IntPtr hDC = e.Graphics.GetHdc(); HardMarginLeft = GetDeviceCaps(hDC, PHYSICALOFFSETX); HardMarginTop = GetDeviceCaps(hDC, PHYSICALOFFSETY); e.Graphics.ReleaseHdc(hDC); HardMarginLeft = (int)(HardMarginLeft * 100.0 / e.Graphics.DpiX); HardMarginTop = (int)(HardMarginTop * 100.0 / e.Graphics.DpiY); Bounds = e.MarginBounds; Bounds.Offset(-HardMarginLeft, -HardMarginTop); } } } |
Dit wordt aangeroepen met de volgende code:
C#:
1
2
3
4
5
6
7
8
9
10
| PrinterBounds objBounds = new PrinterBounds(ev); Rectangle r = objBounds.Bounds; float leftMargin = r.Left;; float rightMargin = r.Right; float topMargin = r.Top; float bottomMargin = r.Bottom; float docWidth = r.Width; float docHeight = r.Height; |
Als ik de marges uit PrintPageEventArgs met MarginBounds probeer te halen blijft de marge bij iedere printer gelijk (bij bovenstaande code ook).
Ik maakt trouwens een PrintDocument aan om afdrukken te maken.
Wie weet een methode waarmee de echte marge van een printer bepaald kan worden?
[ Voor 4% gewijzigd door NMe op 13-03-2006 10:22 ]