2009-08-06 6 views
0

Für unsere Anwendung müssen wir in der Lage sein, Ausgabe an einer bestimmten Stelle auf einer Seite zu drucken. Zum Beispiel müssen wir in der Lage sein, einen Text genau (1.00 ", 1.00") relativ zur oberen linken Ecke der Seite zu drucken. Das Problem liegt in der Tatsache, dass alle Koordinaten in den verschiedenen GDI Anrufe an der oberen linken Ecke des Displays nicht relativ, sondern sind eher relativ zu einem vorrichtungsabhängigen Offset, der einen mit dem Code erhält, wie:Drucken Probleme unter Terminaldienste (Win32)

int cx = ::GetDeviceCaps(hDC, PHYSICALOFFSETX); 
int cy = ::GetDeviceCaps(hDC, PHYSICALOFFSETY); 

Diese befinden sich natürlich in Geräteeinheiten, Sie konvertieren sie also nach Bedarf in logische Einheiten. Und dann können Sie Ihre Koordinaten in anderen API-Aufrufen anpassen, um die Ausgabe genau dort zu erhalten, wo Sie sie benötigen.

Dies funktioniert wie ein Charme, wenn direkt unter Windows ausgeführt wird. Wenn die Terminal-Dienste jedoch verwenden, um auf einem umgeleiteten Drucker unter Windows Server 2008 zu drucken, melden die DeviceCaps-Funktionen nicht mehr richtige Information zumindest für eine große Anzahl verschiedener Drucker. Geräteoffsets werden als 0 gemeldet, und wenn der druckbare Bereich auf einer Seite abgefragt wird, werden falsche Informationen zurückgegeben (die APIs überschätzen den verfügbaren Immobilienbestand). Schlimmer noch, es scheint, dass entweder MS oder der Druckertreiber-Verkäufer das Problem bemerkt, weil, wenn der Druckauftrag zu Ihrem lokalen Rechner spoolt (so dass er dann zu Ihrem lokalen Drucker spoolen kann), die gesamte Ausgabe durch Kompensieren verschoben wird Menge; eine Menge, die anscheinend ein Hack ist, da sie nirgends dem korrekten Wert entspricht, der von GetDeviceCaps gemeldet wird, wenn die Druckerfunktionen lokal abgefragt werden.

So ist das Ergebnis, dass die Druckausgabe der Seite verschoben wird ausgeschaltet ...

Hat jemand anderes dieser Art gesehen Fragen? Bin ich verrückt nach präziser Kontrolle über die Druckausgabe? Um korrekt zu paginieren, braucht man einen genauen Wert für die Menge des verfügbaren druckbaren Platzes, nein? Jede Hilfe oder Hinweise würden geschätzt werden.

Antwort