Выравнивание текста в XPS документе
От: crazyfern  
Дата: 17.10.11 17:59
Оценка:
В последнее время вынужден был столкнуться и немного погрузиться в создание и редактирование XPS документов.

Нужно написать код, который выводил бы текст в xps документ с заранее заданным выравниванием по границе листа (это если упрощенно).

К примеру, если нужно выровнять текст по правой границе, то по идее нужно вычислить ширину строки в юнитах (1/96 дюйма), узнать размер страницы и вычтя из размера страницы ширину строки (пусть она всегда будет меньше ширины листа) получить смещение по ОХ от левой границы (т.е. координату origin глифа).

В процессе написания кода с толкнулся со следующей проблемой: как вычислить размер строки?

Изначально я предполагал, что будет достаточно задаться контекстом системного дисплея и рассчитать ширину строки с помощью функции GetTextExtentPoint32, а затем сконвертировать полученное значение в юниты. Однако, оказалось, что это не так.

Создаю шрифт Arial, высотой 10 (lfHeight = -13). Выбираю полученный шрифт в контекст устройства. Рассчитываю длину строки (пусть строка будет "ШШШШШШ"), получаю значение равное 66 логических юнитам. Поскольку разрешение монитора = 96 пикселей на дюйм, а режим мастабирования MM_TEXT, то длина строки в юнитах xps так же равна 66. Пытаюсь отобразить строку по смещению Xmax — 66 с размером шрифта равным 13.333 (FontRenderingEmSize = 10 * 96 (юнитов на дюм) / 72 (типографских точек на дюйм)) и получаю, что текст частично вылезает за границы листа

Посмотрел, как такую операцию выполняет Word. Так у него координата начала строки другая... (немного меньше моей) Вот и не пойму где же я накосячил в расчетах... или длину строки надо вычислять другим способом?

Если кто-то сможет дать полезный совет или поделится собственным опытом, буду очень признателен.
xps gdi
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.