Основная трудность заключается в том, что универсальная графика Кажется, у .MeasureText нет опции, дающей идеальные результаты.
Это то, что у меня есть в настоящее время, которое дает наилучшие результаты, но оно все еще несовершенно и при попытке выравнивания по правому краю или центру например текст, мне действительно нужно как можно точнее знать ширину текста.
Код: Выделить всё
private SizeF MeasureTextSize(FontFamily fontFamily, float fontSize, string text)
{
Font pixelFont = new Font(fontFamily, fontSize, GraphicsUnit.Pixel);
using (Graphics graphics = Graphics.FromImage(new Bitmap(1, 1)))
{
return graphics.MeasureString(text, pixelFont, PointF.Empty, StringFormat.GenericTypographic);
}
}
- используя все различные графические единицы, Pixel кажется наиболее точным (даже хотя я читал, что вывод PDF вместо этого выполняется с помощью Points)
- Различные форматы строк. Может быть, ответом является собственный StringFormat?

Я не эксперт по тексту, поэтому предполагаю, что существует несоответствие между GDI/GDI+ или что-то еще с измеренным типом шрифта и типом напечатанного шрифта.
Кроме того, это необходимо сделать без каких-либо других ранее существовавших библиотек PDF. Поэтому я не могу использовать решения iText или PDFSharp.
редактировать: добавлен базовый код, чтобы вы могли запустить его самостоятельно
https://dotnetfiddle.net/m18wez
Подробнее здесь: https://stackoverflow.com/questions/783 ... w-on-a-pdf