2009-08-06 8 views
0

Pour notre application, nous devons être en mesure d'imprimer la sortie à un emplacement spécifique sur une page. Par exemple, nous devons être en mesure d'imprimer du texte à exactement 1,00 ", 1,00" par rapport au coin supérieur gauche de la page. Le problème réside dans le fait que toutes les coordonnées dans les différents appels GDI ne sont pas par rapport au coin supérieur gauche de l'écran, mais sont plutôt par rapport à un dispositif dépendant de décalage, que l'on obtient avec le code comme:Problèmes d'impression sous les services Terminal Server (Win32)

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

Ceux-ci, bien sûr, sont dans les unités de l'appareil, de sorte que vous les convertissez en unités logiques comme vous le souhaitez. Et puis, vous pouvez ajuster vos coordonnées dans d'autres appels API pour obtenir la sortie exactement où vous en avez besoin.

Cela fonctionne comme un charme lorsque vous utilisez Windows directement. Toutefois, lorsque vous utilisez les services Terminal Server pour imprimer sur une imprimante redirigée sur Windows Server 2008, les fonctions DeviceCaps ne signalent plus les informations correctes, au moins pour un grand nombre d'imprimantes différentes. Les décalages de périphériques sont signalés par 0 et lors de l'interrogation de la région imprimable sur une page, des informations incorrectes sont renvoyées (les API surestiment la quantité de biens immobiliers disponibles). Pire, il semble que MS ou le fournisseur de pilote d'imprimante est conscient du problème, car lorsque le travail d'impression est spoulé sur votre ordinateur local (afin qu'il puisse ensuite être envoyé à votre imprimante locale), toute la sortie est décalée montant; une quantité qui semble être un hack car elle n'est nulle part proche de la valeur correcte signalée par GetDeviceCaps lors de l'interrogation locale des capacités de l'imprimante.

Ainsi, le résultat est que la sortie imprimée se déplace hors de la page ...

Quelqu'un at-il vu les questions d'autre de ce genre? Suis-je fou de vouloir un contrôle précis sur la sortie imprimée? Certes, pour paginer correctement, il faut une valeur précise pour la quantité d'espace imprimable disponible, non? Toute aide ou pointeurs seraient appréciés.

Répondre

Questions connexes