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

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

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 чтобы получить графический объект, который будет настроен правильно для измерения текста для печати.

Другие вопросы по тегам