druckbare Seitenränder ermitteln

JK_net

Erfahrenes Mitglied
Hallo!

Ist es möglich, den druckbaren Bereich eines Druckers zu ermitteln?
D.h. den linken und oberen Seitenrand, an dem gedruckt werden kann?

Es gibt ja in Word die Möglichkeit, über PageSetups dies herauszufinden...
Aber ich möchte es Drucker unabhängig ermitteln.

Für eure Hilfe wäre ich sehr dankbar!

MfG
Jens
 
Hallo Jens!

Der eigentliche Druckbereich hängt schon vom ausgewählten Drucker ab; so ganz unabhängig kannst du das nicht ermitteln...
Nun willst du also den eigentlichen Druckbereich herausfinden. Leider ist diese Funktion bei den MS-Programmierern in Vergessenheit geraten. Demzufolge gibt es keine Eigenschaft/Methode, mit der sich der eigentliche Druckbereich und insbesondere der Offset des Druckbereichs ermitteln lässt.
Aber wieder einmal kommt man mit GDI-Programmierung weiter als mit GDI+.

Binde zunächst folgendes ein:
Code:
using System.Drawing.Printing;
using System.Diagnostics;
using System.Runtime.InteropServices;

Dann folgende Deklarationen:
Code:
[DllImport("gdi32.dll")]
private static extern int GetDeviceCaps(IntPtr hdc, int nIndex);
		
private const int PHYSICALOFFSETX = 112;
private const int PHYSICALOFFSETY = 113;
private const int LOGPIXELSX = 88;
private const int LOGPIXELSY = 90;
private const int HORZSIZE = 4;
private const int VERTSIZE = 6;

Abfrage von Eigenschaften und Ausgabe:
Code:
Graphics g;
IntPtr dc;

g = printDocument1.PrinterSettings.CreateMeasurementGraphics();
dc = g.GetHdc();
Debug.WriteLine("Offset X: " + GetDeviceCaps(dc, PHYSICALOFFSETX) * 25.4 / GetDeviceCaps(dc, LOGPIXELSX));
Debug.WriteLine("Offset Y: " + GetDeviceCaps(dc, PHYSICALOFFSETY) * 25.4 / GetDeviceCaps(dc, LOGPIXELSY));
Debug.WriteLine("Druckbreite: " + GetDeviceCaps(dc, HORZSIZE));
Debug.WriteLine("Druckhöhe: " + GetDeviceCaps(dc, VERTSIZE));
g.ReleaseHds(dc);

Quelle: Visual C#.NET, Grundlagen und Profiwissen, Walter Doberenz & Thomas Kowalski
 

Neue Beiträge

Zurück