Проблемы с печатью в службах терминалов (Win32)

Для нашего приложения нам нужно иметь возможность печатать вывод в определенном месте на странице. Например, нам нужно иметь возможность печатать текст с точностью (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 при локальном запросе возможностей принтера.

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

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


person Community    schedule 06.08.2009    source источник


Ответы (1)


Проблема с базой знаний Microsoft 959442 и включенное исправление должны решить проблему:

«Края документа обрезаются при попытке распечатать документ с помощью функции Easy Print служб терминалов с клиентского компьютера. под управлением Windows XP с пакетом обновления 3 (SP3), Windows Vista с пакетом обновления 1 (SP1) или Windows Server 2008 "

person Craig Lebakken    schedule 14.10.2010