Как оценить длину строки для печати?

1

Я пытаюсь оценить длину печатной строки.

Font newFont = new Font("Arial", 12, FontStyle.Bold, GraphicsUnit.Point);
label1.Font = newFont;
labe1.Text = "300028";
Graphics g = Graphics.FromHwnd(label1.Handle);
SizeF txtSize = g.MeasureString(label1.Text, label1.Font);

txtSize - {Width = 60.3177, Height = 19.875}.

Фактическая ширина должна быть 60.3177 * 0.353 = 21.29 мм

где (1 точка = 1/72 дюйма = 0,353 мм)

На бумаге (напечатанной в Word) ширина составляет около 13,5 мм

Почему мы получаем такую большую разницу между значением, вычисленным с MeasureString (21,29 мм) и реальным (13,5 мм)?

Я знаю ограничения метода MeasureString, но я не думаю, что это не может оправдать такую большую разницу.

Что мне не хватает?

Теги:
winforms

1 ответ

3

Потому что вы неправильно инициализировали свой Graphics объект. Вы используете ручку дисплея, а не ручку печати.

Согласно этому сообщению ваш объект Graphics должен быть получен с использованием метода PrinterSettings.CreateMeasurementGraphics на PrintDocument:

Graphics g = pd.PrinterSettings.CreateMeasurementGraphics();
  • 0
    Большое спасибо. Используя ручку печати, я получаю Width = 62 83094 (я бы ожидал что-то вроде 38)
  • 0
    Вы установили размер шрифта в миллиметрах? new Font("Arial", 12, FontStyle.Regular, GraphicsUnit.Millimeter);
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню