Я генерирую получение и использую Графический объект назвать метод 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 назад?