2014-11-06 3 views
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} points.

Фактическая ширина должна быть 60,3177 * 0,353 = 21,29 мм

, где (1 балл = 1/72 дюйма = 0,353 мм)

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

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

Мне известно о limitations of the MeasureString method, но я не думаю, что это не может оправдать такую ​​большую разницу.

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

ответ

3

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

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

Graphics g = pd.PrinterSettings.CreateMeasurementGraphics(); 
+0

Спасибо большое. Используя дескриптор печати, я получаю Width = 62,83094 (я бы ожидал чего-то вроде 38) – Klaus78

+0

Вы установили размер шрифта в миллиметры? 'new Font (« Arial », 12, FontStyle.Regular, GraphicsUnit.Millimeter);' –

+0

Я использую GraphicsUnit.Point, где 1 пункт = 1/72 дюйма = 0,353 мм, до моего понимания – Klaus78