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



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

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为{宽度=60.3177,高度=19.875}点。

实际宽度应为60.3177*0.353=21.29 mm

其中(1点=1/72英寸=0.353毫米)

在纸上(用Word打印),宽度约为13.5毫米

为什么我们用MeasureString计算的值(21.29 mm)和实际值(13.5 mm)之间有这么大的差异?

我知道MeasureString方法的局限性,但我不认为这不能证明有这么大的差异。

我缺少什么?

因为初始化Graphics对象错误。您使用的是显示句柄,而不是打印手柄。

根据这篇文章,你的Graphics对象应该在PrintDocument:上使用PrinterSettings.CreateMeasurementGraphics方法获得

Graphics g = pd.PrinterSettings.CreateMeasurementGraphics();

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

正如另一个答案所提到的,您需要使用PrinterSettings.CreateMeasurementGraphics来获得一个图形对象,该对象将以正确的方式配置以测量要打印的文本。

最新更新