Как оценить длину строки для печати?
Я пытаюсь оценить длину напечатанной строки.
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, высота =19,875} точек.
Фактическая ширина должна составлять 60,3177 * 0,353 = 21,29 мм.
где (1 балл = 1/72 дюйма = 0,353 мм)
На бумаге (напечатанной с помощью Word) ширина составляет около 13,5 мм.
Почему мы получаем такую большую разницу между значением, вычисленным с помощью MeasureString (21,29 мм), и действительным (13,5 мм)?
Я знаю об ограничениях метода MeasureString, но я не думаю, что это не может оправдать такую большую разницу.
Чего мне не хватает?
2 ответа
Потому что вы инициализируете свой Graphics
неправильный объект Вы используете ручку дисплея, а не ручку печати.
Согласно этому посту ваш Graphics
объект должен быть получен с использованием PrinterSettings.CreateMeasurementGraphics
метод на PrintDocument
:
Graphics g = pd.PrinterSettings.CreateMeasurementGraphics();
Печатные единицы по умолчанию в сотых долях дюйма, а не в 72 долях дюйма.
Как упоминается в другом ответе, вам нужно использовать PrinterSettings.CreateMeasurementGraphics
чтобы получить графический объект, который будет настроен правильно для измерения текста для печати.