阅读字形和度量信息

.NET API 解决方案,用于计算字符串宽度、计算字形坐标以及使用字形进行其他操作。

 

Aspose.Font API 解决方案具有丰富的字体处理功能。转换、字形操作、拉丁符号检测等等。某些功能与使用字形的操作相关联。

字形是字体的一个单独设计的字符,或者它是符号/字符的图形表示。要了解有关此字体单位的更多信息,请阅读 Glyph 简介 文章。

本页描述了如何读取 Glyphs 和 Metrics 信息的选项,但整个功能在 Using Glyph objects 文章。在那里,您将找到更多 C# 代码示例,并了解 Aspose.Font 处理字形特别是 Glyph 对象的功能。更多使用 Aspose.Font 操作 Glyphs 的代码示例存储在 Aspose.Font.Examples.sln 解决方案。

要使用字形,我们需要:

  • Aspose.Font for .NET API 是一个功能丰富、功能强大且易于使用的 C# 平台文档操作和转换 API。

  • 打开 NuGet 包管理器,搜索 Aspose.Font 并安装。您也可以从包管理器控制台使用以下命令。

Package Manager Console Command


    PM> Install-Package Aspose.Font

使用 C# 计算字符串宽度的步骤:

  1. 声明文本和其他常量。这里使用短语«Hello world»作为示例。
  2. 为字符串宽度声明一个变量。
  3. 使用 GlyphId 类获取文本中每个字母的字形。计算整个文本的宽度。
  4. 使用 MeasureString() 方法可以实现相同的结果。
  5. 打印输出结果。

用于查找字符串宽度的 C# 代码

    using System;
    using System.IO;
    using System.Drawing;
    using System.Collections.Generic;
    using Aspose.Font.Sources;
    using Aspose.Font.Glyphs;
    using Aspose.Font.RenderingPath;
    //Declare the text and other constants
    const string text = "Hello world";
    const int fontSize = 10;

    //Declare a variable for string width
    double width = 0;

    //Get a glyph for each letter in text and calculate width for whole text.
    //The same result can be achieved using the method font.Metrics.MeasureString(text, fontSize).
    foreach (char symbol in text)
    {
        GlyphId gid = this._font.Encoding.DecodeToGid(symbol);
        Glyph glyph = this._font.GetGlyphById(gid);
        width += (glyph.WidthVectorX / this._font.Metrics.UnitsPerEM) * fontSize;
    }            

    //Print output results
    Console.WriteLine(string.Format("Width for text \"{0}\" with font size {2} is equal {3}." , 
        text, FontName, fontSize, width));

使用 C# 计算所有带有坐标的字形点的步骤:

  1. 使用 points 声明结果列表。
  2. IPathSegment 界面上指定 Init 服务引用。
  3. 迭代所有字形路径段并总结点。

用于查找字形点的 C# 代码

    Glyph glyph;

    //Declare the resultant list with points
    List<Point> points = new List<Point>();

    //Init service reference on IPathSegment
    IPathSegment prevSegment = null;

    //Iterate all the glyph path segments and collect points
    foreach (IPathSegment segment in glyph.Path.Segments)
    {
        if ((segment is LineTo)
            || (segment is CurveTo))
        {
            if (prevSegment is MoveTo)
            {
                MoveTo moveTo = prevSegment as MoveTo;
                AddPoint((int)moveTo.X, (int)moveTo.Y, points);
            }
            if (segment is LineTo)
            {
                LineTo line = segment as LineTo;
                AddPoint((int)line.X, (int)line.Y, points);
            }
            else if (segment is CurveTo)
            {
                CurveTo curve = segment as CurveTo;
                AddPoint((int)curve.X1, (int)curve.Y1, points);
                AddPoint((int)curve.X2, (int)curve.Y2, points);
                AddPoint((int)curve.X3, (int)curve.Y3, points);
            }
        }
        prevSegment = segment;
    }	

    void AddPoint(int x, int y, List<Point> points)
    {
        Point p = new Point();
        p.X = x;
        p.Y = y;
        points.Add(p);
    }



常问问题

1. 什么是字形度量?

字形度量 是在创建文本布局时影响字形定位方式的参数。

2. 什么是字形指标?

最常用的字形度量是前进宽度、原点、侧方位、基线、上升、上升、下降、下降、边界框、高度、宽度和字偶距。

3. 如何使用此 API 解决方案管理字形?

要在 C# 中编码字形,请使用 Aspose.Font.Gly​​phs 命名空间的实体。

4. 什么是字形?

字形是一种单独设计的字体字符。它还可以定义为符号/字符的图形表示。