Проблемы с печатью в службах терминалов (Win32) - PullRequest
0 голосов
/ 07 августа 2009

Для нашего приложения мы должны иметь возможность печатать вывод в определенном месте на странице. Например, нам нужно иметь возможность печатать некоторый текст точно (1,00 ", 1,00") относительно верхнего левого угла страницы. Проблема заключается в том, что все координаты в различных вызовах GDI не относятся к верхнему левому углу дисплея, а скорее относятся к смещению, зависящему от устройства, которое получается с помощью кода:

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

Это, конечно, в единицах устройства, поэтому вы можете преобразовать их в логические единицы по желанию. Затем вы можете настроить свои координаты в других вызовах API, чтобы получить результат именно там, где он вам нужен.

Это работает как шарм при работе под Windows напрямую. Однако при использовании служб терминалов для печати на перенаправленном принтере в Windows Server 2008 функции DeviceCaps больше не выдают правильную информацию, по крайней мере, для большого количества разных принтеров. Смещения устройства отображаются как 0, и при запросе области печати на странице возвращается неверная информация (API-интерфейсы завышают объем доступной недвижимости). Хуже того, похоже, что либо MS, либо поставщик драйвера принтера знают об этой проблеме, потому что, когда задание на печать ложится на локальный компьютер (так что оно может затем наматываться на локальный принтер), весь вывод смещается некоторой компенсирующей количество; количество, которое кажется хаком, поскольку оно далеко не соответствует правильному значению, указанному GetDeviceCaps при локальном запросе возможностей принтера.

Итак, в результате печатная продукция смещается со страницы ...

Кто-нибудь еще видел проблемы такого рода? Я сумасшедший, чтобы хотеть точный контроль над печатной продукцией? Конечно, чтобы правильно разбить на страницы, нужно точное значение количества доступного места для печати, не так ли? Любая помощь или указатели будут оценены.

1 Ответ

0 голосов
...