如何估计待打印字符串的长度?

时间:2014-11-06 12:25:17

标签: c# winforms measurestring

我正在尝试估计打印字符串的长度。

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,但我不认为这不能证明这么大的差异。

我缺少什么?

2 个答案:

答案 0 :(得分:4)

因为您错误地初始化了Graphics对象。您使用的是 display 句柄,而不是 print 句柄。

根据this post,您应使用PrinterSettings.CreateMeasurementGraphics上的PrintDocument方法获取Graphics个对象:

Graphics g = pd.PrinterSettings.CreateMeasurementGraphics();

答案 1 :(得分:0)

默认情况下,打印单位是百分之一英寸,而不是72英寸。

如其他答案所述,您需要使用PrinterSettings.CreateMeasurementGraphics来获取图形对象,该对象将被配置为测量打印文本的正确方式。