Почему Графика. MeasureString () возврат более высокого, чем ожидаемое число?

Я генерирую получение и использую Графический объект назвать метод DrawString для распечатывания обязательного текста.

graphics.DrawString(string, font, brush, widthOfPage / 2F, yPoint, stringformat);

Это хорошо работает для того, что мне был нужен он, чтобы сделать. Я всегда знал то, что я распечатывал, таким образом, я мог вручную обрезать любые строки, таким образом, это будет соответствовать правильно на 80-миллиметровой бумаге получения. Затем я должен был добавить дополнительный бит функциональности, которая сделает это более гибким. Пользователь мог передать в строках, которые будут добавлены к нижней части.

Так как я не знал то, что они собирались поместить, я просто создал свою собственную функцию перехода на новую строку, которая берет во многих символах для обертывания в и сама строка. Для обнаружения количества символов я делал что-то вроде этого:

float width = document.DefaultPageSettings.PrintableArea.Width;
int max = (int)(width / graphics.MeasureString("a", font).Width);

Теперь ширина возвращает меня 283, который в мм является приблизительно 72, который имеет смысл, когда Вы объясняете поля на 80-миллиметровой бумаге.

Но метод MeasureString возвращается 10.5 на шрифте Courier New 8pt. Таким образом вместо того, чтобы двигаться, чем я ожидал быть 36 - 40, я добираюсь 26, приводя к 2 строкам текста, превращаемого в 3-4.

Единицы для PrintableArea. Ширина является 1/100-й из дюйма, и PageUnit для графического объекта является Дисплеем (который говорит, является обычно 1/100-м из дюйма для принтеров). Итак, почему я только добираюсь 26 назад?

46
задан Brandon 29 July 2009 в 21:14
поделиться