Почему Graphics.MeasureString () возвращает больше ожидаемого числа?
Я генерирую квитанцию и использую объект Graphics для вызова метода 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.Width составляют 1/100 дюйма, а PageUnit для графического объекта - «Дисплей» (который обычно равен 1/100 дюйма для принтеров). Так почему же я получаю только 26 назад?