Я знаю, что это старый вопрос, но квази-решение для него.Я проверял свое решение несколько раз, и оно кажется точным, но не точным.Основа этого кода взята непосредственно из примера MSDN и этого ответа для SO, единственное, что я делаю по-другому - это изменение единиц измерения от точек до дюймов.
Графика MSDN.MeasureString ()
private float GetTextWidth(string fontFace, float fontSize, string text)
{
SizeF size = new SizeF();
Font font = new Font(fontFace, fontSize);
//Using a Bitmap object for frame of reference in order to get to a Graphics object
using (Bitmap b = new Bitmap(1, 1))
{
//Graphics object allows string measurement
using (Graphics g = Graphics.FromImage(b))
{
//change the units to inches
g.PageUnit = GraphicsUnit.Inch;
//Perform the measurement
size = g.MeasureString(text, font);
}
}
//Print to console if you want
//Console.WriteLine(size.Width);
return size.Width;
}
Я проверил это со следующими входами: («Arial», 10, «Страница 1 из 1»), и я получил 0,777972 дюйма
Если вы прочитаете примечания по ссылке MSDN выше, то увидите, что на этом рисунке есть немного дополнительного пространства.Вы должны знать, что это происходит:
Метод MeasureString предназначен для использования с отдельными строками и включает в себя небольшой объем дополнительного пространства до и после строки, что позволяет использовать нависающие глифы.
Когда я измерил это на кусочке бумаги от начала до конца, я получил около 0,625, то есть разница 0,152972, что, по сути, составляет ~ 20% заполнения.Я предполагаю, что он распределяется по обеим сторонам равномерно.
Также будьте осторожны с тем, какие шрифты вы используете - например, Helvetica не является поддерживаемым шрифтом по умолчанию, поэтому объект Font по умолчанию будет Arial, если он может 'не найди свой шрифт.