2

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

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 毫米

为什么我们在使用 MeasureString 计算的值(21.29 毫米)和实际值(13.5 毫米)之间得到如此大的差异?

我知道MeasureString 方法的局限性,但我认为这不能证明如此大的差异是合理的。

我错过了什么?

4

2 回答 2

4

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

根据这篇文章,您的Graphics对象应该使用以下PrinterSettings.CreateMeasurementGraphics方法获得PrintDocument

Graphics g = pd.PrinterSettings.CreateMeasurementGraphics();
于 2014-11-06T12:30:37.713 回答
0

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

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

于 2018-09-05T20:10:05.330 回答