PDFsharp включает класс XTextFormatter, который можно использовать для рисования текста с переносами строк.
Однако он не может определить высоту, необходимую для текста. Вдохновленный комментарием @ Wakka02, я улучшил этот класс, создав класс XTextFormatterEx.
На мой взгляд, это также отвечает на оригинальный вопрос, поэтому я отправляю ответ.
Я знаю, что это старый вопрос, и ответ может не помочь ОП, но это часто задаваемый вопрос, и ответ может помочь другим.
Новый класс имеет 500 строк кода - и я думаю, что это будет слишком много для этого поста.
Исходный код можно найти на форуме PDFsharp:
http://forum.pdfsharp.net/viewtopic.php?p=9213#p9213
Это также можно найти в моем скромном блоге:
http://developer.th -soft.com / разработчик / PDFsharp улучшающие-на-xtextformatter-класса измерительно-на-высоты-оф-текст /
При использовании нового класса вы можете сначала позвонить PrepareDrawString
, чтобы узнать, сколько текста умещается и какую высоту имеет соответствующий текст. Затем ваш декодер может нарисовать подготовленный текст или подготовить другой текст или подготовить тот же текст с другим прямоугольником.
Мой новый класс на работе:
XTextFormatterEx tf = new XTextFormatterEx (gfx);
int lastCharIndex;
double requiredHeight;
// Draw the text in a box with the optimal height
// (magic: we know that one page is enough).
XRect rect = new XRect(40, 100, 250, double.MaxValue);
//tf.Alignment = ParagraphAlignment.Left;
tf.PrepareDrawString(text, font, rect,
out lastCharIndex, out neededHeight);
rect = new XRect(40, 100, 250, neededHeight);
gfx.DrawRectangle(XBrushes.SeaShell, rect);
// Both variants should look the same.
// Optimized version: draw the prepared string.
tf.DrawString(XBrushes.Black, XStringFormats.TopLeft);
Подготовка текста вызывает MeasureString много раз. Позднее подготовленный текст может быть нарисован без повторного вызова MeasureString.
На сегодняшний день (17 июля 2015 г.) класс XTextFormatterEx (как и оригинальный XTextFormatter) использует внутренние поля класса XFont. Это требует особого подхода при составлении класса. Я решил скопировать свой класс XTextFormatterEx в папку PDFsharp после загрузки полного исходного пакета для PDFsharp 1.32.
Любой, кто пытается изменить класс XTextFormatter или XTextFormatterEx, столкнется с той же проблемой.
Я надеюсь, что эта проблема будет решена в будущих версиях PDFsharp, что позволит включать в проект приложения модифицированные версии этих классов.