如何获取字符串的宽度

How to get string's width

编辑

图形来自内存中的 Pdf,但我不确定如何将其与图形一起使用 class... 不确定这个答案中的 e Get System.Drawing.Font width?



第一个问题

正在尝试使用此方法获取字符串的宽度,

    public static void GetStringWidth(string measureString)
    {
        Font stringFont = new Font("Arial", 16);
        SizeF stringSize = new SizeF();
        stringSize = Graphics.MeasureString(measureString, stringFont);
        double width = stringSize.Width;

        Console.WriteLine(width);
    }

但是出现错误,

non-static 字段、方法或 属性 'System.Drawing.Graphics.MeasureString(string, System.Drawing.Font)'

需要对象引用

MeasureString 不是静态方法。您将需要使用 Graphics 实例来访问它。

例如:

private void MeasureString(PaintEventArgs e)
{
    string measureString = "Measure String";
    Font stringFont = new Font("Arial", 16);
    SizeF stringSize = new SizeF();
    stringSize = e.Graphics.MeasureString(measureString, stringFont);
}

如果您要引用 System.Windows.Forms,请改用 TextRenderer class,这将使您不必使用 Graphics 对象。

private void MeasureText()
{
    String text1 = "Some Text";
    Font arialBold = new Font("Arial", 16);
    Size textSize = TextRenderer.MeasureText(text1, arialBold);
}

更新:

您可以使用假图像来使用 Graphics 测量字符串,因为我们不能在 class 库中使用 CreateGraphics:

private void MeasureString()
{
    string measureString = "Measure String";
    Font font = new Font("Arial", 16);
    Image fakeImage = new Bitmap(1,1); 
    Graphics graphics = Graphics.FromImage(fakeImage);
    SizeF size = graphics.MeasureString(measureString, font);
}