2016-05-09 2 views
0

Я пытаюсь определить размер текстового блока, который понадобится для блока текста. Затем это нужно экспортировать для скрипта InDesign для создания страницы. Все в консольном приложении.Определение высоты блока текста в консольном приложении

Я пытался создать WPF TextBlock и назначить Text и Width, но Height и ActualHeight является NaN.

Как определить размер текстового фрейма, который потребуется для некоторого текста? Является ли текстовый блок WPF/Winforms лучшим решением (чтобы попытаться воспользоваться существующим кодом), или есть какой-то другой, лучший рабочий процесс?

+0

Вы можете получить помощь быстрее, если лучше объясните, что такое * textframe * (я не знаю, что такое 'InDesign'). Это может быть простой вопрос (как вы отметили его с помощью 'console'), но я не знаю, что вы спрашиваете. Можете ли вы предоставить код? Картинка? Что-то понять, в чем проблема? В соответствии с WPF 'TextBlock' вы не можете получить размер до перехода макета. Вы можете попробовать [force] (https://msdn.microsoft.com/en-us/library/system.windows.uielement.updatelayout (v = vs.110) .aspx). – Sinatr

+0

Текстовый фрейм - это просто термин «Настольная публикация» для текстового поля. В этом примере я просто хочу получить нужную высоту текстового блока из определенной ширины текстового блока для блока текста. – user3791372

ответ

0

В C# есть два класса, которые используются для рисования текста. TextRenderer и Graphics.

TextRenderer использует GDI для визуализации текста, тогда как Graphics использует GDI +. Эти два используют несколько иной метод для разметки текста.

Вы можете использовать Graphics.MeasureString или TextRenderer.MeasureText

Пример

using(Graphics g = Graphics.FromHwnd(IntPtr.Zero)) 
{ 
    SizeF size = g.MeasureString("some text", SystemFonts.DefaultFont); 
} 

В вашем случае я бы предложил использовать TextRenderer. Пример обертывания текста -

var size = TextRenderer.MeasureText(text, font, new Size(width, height), TextFormatFlags.WordBreak); 

Третий аргумент - размер прямоугольника чертежа. Вы можете передать высоту как 0, если вы этого не знаете.

+0

Я считаю, что ни одна из этих ручных текстовых оберток? – user3791372

+0

Они делают. Проверьте перегрузки TextRenderer. Обновлен с примера. –

+0

Вау, я пропустил это - отлично! – user3791372

Смежные вопросы