Я пытаюсь оценить длину печатной строки.
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, но я не думаю, что это не может оправдать такую большую разницу.
Что мне не хватает?
Потому что вы неправильно инициализировали свой Graphics
объект. Вы используете ручку дисплея, а не ручку печати.
Согласно этому сообщению ваш объект Graphics
должен быть получен с использованием метода PrinterSettings.CreateMeasurementGraphics
на PrintDocument
:
Graphics g = pd.PrinterSettings.CreateMeasurementGraphics();
new Font("Arial", 12, FontStyle.Regular, GraphicsUnit.Millimeter);