我正在尝试估计打印字符串的长度。
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 mm
其中(1点= 1/72英寸= 0.353毫米)
在纸上(用Word打印),宽度约为13.5 mm
为什么我们在MeasureString(21.29 mm)和真实的(13.5 mm)计算出的值之间会有如此大的差异?
我知道limitations of the MeasureString method,但我不认为这不能证明这么大的差异。
我缺少什么?
答案 0 :(得分:4)
因为您错误地初始化了Graphics
对象。您使用的是 display 句柄,而不是 print 句柄。
根据this post,您应使用PrinterSettings.CreateMeasurementGraphics
上的PrintDocument
方法获取Graphics
个对象:
Graphics g = pd.PrinterSettings.CreateMeasurementGraphics();
答案 1 :(得分:0)
默认情况下,打印单位是百分之一英寸,而不是72英寸。
如其他答案所述,您需要使用PrinterSettings.CreateMeasurementGraphics
来获取图形对象,该对象将被配置为测量打印文本的正确方式。