Usando objetos glifos | Solução da API para .NET

Trabalhar com glifos é crucial ao codificar fontes, pois é a unidade deles. Quando as informações básicas sobre os glifos são explicadas no artigo do o que é o parágrafo da fonte, aqui vamos ensinar a você a funcionalidade do Aspose.Font para trabalhar com glifos e os objetosglifosem particular.

Objeto de glifos

Os glifos de qualquer tipo de letra são representados pelo tipo Glyph na biblioteca Aspose.Font. Assim sendo, o tipo Glyph é um objeto universal para glifos de tipos de letra, independentemente do formato do tipo de letra (TrueType, Compact Font Format, etc.).

A funcionalidade fornecida pelo objeto Glyph

Que funcionalidade esse objeto fornece para nós?

Esta pergunta é respondida pelas propriedades que possui.

Vamos ter um exemplo com o próximo trecho de código que mostra como calcular a largura do texto “Hello World” em pixels quando o tamanho da fonte é 10.

Adicione os próximos namespaces à frente do arquivo:

1    usando aspose.font.glyphs;			
2    usando a fonte Aspose.font.font;

Então você precisa dar os próximos passos:

 1    Fonte Aspose.Font.Font;
 2
 3    // Declare text and other constants
 4    const string text = "Hello world";
 5    const int fontSize = 10;
 6
 7    //Declare a variable for string width
 8    double width = 0;     
 9
10    //Get glyphs for each letter in the text and calculate the width for the whole text
11    //The same result can be achieved using the method font.Metrics.MeasureString (text, fontSize)
12    foreach (char symbol in text)
13    {
14        GlyphId gid = font.Encoding.DecodeToGid(symbol);
15        Glyph glyph = font.GetGlyphById(gid);
16        width += (glyph.WidthVectorX / font.Metrics.UnitsPerEM) * fontSize;
17    }

Para obter a caixa delimitadora do glifo, use a propriedade glyphbbox do objeto glifo.

Para obter uma representação visual dos glifos, você precisa conhecer as coordenadas para todos os pontos dos glifos.

Como obter coordenadas para todos os pontos de glifos do objeto Glyph?

As próximas propriedades, isEmpty e caminho foram projetadas para este caso.

Propriedade isEmpty é auxiliar. Ele nos diz se o caminho do glifo está vazio ou, em outras palavras, o Glyph não tem instruções de desenho. Se tiver o valor false, é hora de construir toda a figura do glifo usando a propriedade muito útil caminho.

No conceito de Aspose.Font Library, a representação de qualquer glifo é dividida nos primitivos gráficos mais simples, chamadossegmentos, e representados pela interface ipathsegment. Interface ipathsegment é um gráfico abstrato básico primitivo.

Os primitivos gráficos concretos são representados por tipos como moveto, lineto, curveto e ClosePath.

Tipo ClosePath é usado para indicar o final do contorno gráfico atual.

Tipos moveto, lineto e curveto por sua definição correspondem aos operadores de pós -escritos idênticos.

Além disso, os tipos moveto e lineto por sua definição correspondem às funções movetoEx() e lineto() de Windows gdi lib, type curveto é usado para descrever Bézier curvas.

A propriedade Path do glifo fornece-nos uma coleção de todas as primitivas gráficas desse glifo.

A propriedade Path tem o tipo SegmentPath e cada objeto deste tipo tem a propriedade Segments do tipo PathSegmentCollection. Esta propriedade Segments devolve todas as primitivas gráficas que o objeto SegmentPath inclui. Por outras palavras, podemos obter todas as primitivas gráficas para o glifo usando a entrada glyph.Path.Segments.

O próximo Exemplo calcula todos os pontos que o Glyph possui e os armazena em variável Points, que representa uma matriz de objetos com o tipo Point.

A lógica usada por esta amostra é simples e não extrai contornos de glifos. Para obter esses contornos usando o Type ClosePath deve ser adicionado ao processamento dos segmentos.

Adicione os próximos namespaces à frente do arquivo:

1    using System.Collections.Generic;
2    using System.Drawing;
3    using Aspose.Font.Glyphs;
4    using Aspose.Font.RenderingPath;

Então você precisa dar os próximos passos:

 1    Glifo glifo;
 2
 3    //Declare resultant list with points
 4    List<Point> points = new List<Point>();
 5
 6    //Init service reference on IPathSegment
 7    IPathSegment prevSegment = null;
 8
 9    //Iterate all glyph path segments and collect points
10    foreach (IPathSegment segment in glyph.Path.Segments)
11    {
12        if ((segment is LineTo)
13            || (segment is CurveTo))
14        {
15            if (prevSegment is MoveTo)
16            {
17                MoveTo moveTo = prevSegment as MoveTo;
18                AddPoint((int)moveTo.X, (int)moveTo.Y, points);
19            }
20            if (segment is LineTo)
21            {
22                LineTo line = segment as LineTo;
23                AddPoint((int)line.X, (int)line.Y, points);
24            }
25            else if (segment is CurveTo)
26            {
27                CurveTo curve = segment as CurveTo;
28                AddPoint((int)curve.X1, (int)curve.Y1, points);
29                AddPoint((int)curve.X2, (int)curve.Y2, points);
30                AddPoint((int)curve.X3, (int)curve.Y3, points);
31            }
32        }
33        prevSegment = segment;
34    }	
35
36    void AddPoint(int x, int y, List<Point> points)
37    {
38        Point p = new Point();
39        p.X = x;
40        p.Y = y;
41        points.Add(p);
42    }

Como calcular o valor de kerning para os glifos?

Outra métrica de glifos, mas a que não é fornecida pelo objeto do tipo glifo. Aqui estamos falando de Kerning. Uma característica como Kerning se aplica a um, mas a um par de glifos. Portanto, para calcular o kerning, você precisa usar o identificador não de um, mas de dois glifos.

A interface IFontMetrics na biblioteca Aspose.Font define o método GetKerningValue() que recebe identificadores de glifos para um par de glifos e retorna um valor de kerning relativo a esse par. Se não existir informação de kerning para o par de glifos, o método devolve 0. A implementação da interface IFontMetrics existe para todas as classes de formatos de tipos de letra suportados e pode ser acedida através da propriedade Metrics. O próximo trecho calcula o valor de Kerning para os glifos associados aos símbolos ‘a’ e ‘c’:

1    Font font; 
2
3    double kerning = font.Metrics.GetKerningValue(font.Encoding.UnicodeToGid('A'), font.Encoding.UnicodeToGid('C'));		

Como obter glifos da fonte?

Qualquer glifo em uma fonte pode ser acessado por um identificador de glifo especial. Esta regra é verdadeira para qualquer formato de fonte.

Identificadores de glifos glifídeo podem ser de dois tipos: número inteiro ou string. Esses tipos de dados glifídeos estão vinculados a características de glifos como o índice de glifos e o nome do glifo correspondentemente.

Além disso, cada glifo possui um índice igual à sua numeração na fonte. Um momento importante é que a numeração não inicie de 1, mas de 0, portanto, se uma fonte contiver 15 glifos, eles têm glifos IDs 0–14.

Os glifos geralmente também têm nomes de glifos, que são breves rótulos de texto ASCII sem espaços. Por exemplo, o nome do glifo para o símbolo “+” é “plus”.

Portanto, o tipo de dados Integer corresponde a uma característica do glifo como índice de glifo, e o tipo de dados string corresponde ao nome do glifo. Cada glifo de uma fonte representa a imagem do símbolo a que esse glifo está associado, de modo que o glifo está vinculado não apenas ao seu identificador, mas ao código exclusivo correspondente a este símbolo.

A relação entre os códigos de caracteres e os identificadores de glifos é chamada de codificação. Os glifos na fonte podem ser acessados ​​diretamente pelos identificadores de glifos ou usando a codificação.

No último caso primeiro, o identificador de glifo com base no código do caractere é calculado. Em seguida, o glifo correspondente ao identificador calculado é recebido.

Que tipo de identificador de glifo deve ser usado para acessar o glifo desejado?

Depende do formato da fonte. Os glifos nas fontes do formato da fonte tipo 1 e do formato de fonte compacta (CFF) são acessíveis pelo nome do glifo. Na verdade, os glifos nas fontes desses formatos são mantidos como uma matriz e são fisicamente acessíveis por índice numérico, mas no nível lógico mais alto para obter um nome de glifo.

As fontes TrueType usam o tipo inteiro para identificadores de glifos. Se a fonte TrueType tiver tabela ‘post’, nome de glifo ou um identificador de glifos do tipo de string poderá ser usado para acessar o glifo.

Recuperando os glifos da fonte usando a biblioteca Aspose.font.

A biblioteca Aspose.Font apresenta namespace aspose.font.glyphs onde glifos, identificadores de glifos e outros objetos são colocados. Classe Glyphid é uma classe abstrata base para identificadores de glifos. Objetos dessa classe são usados ​​para obter glifos desejados.

Os identificadores de glifos para números inteiros e um tipo de sequência são representados pelas classes glyphuint32id e glyphstringid correspondentemente.

Ambas as classes são herdadas da classe abstrata base GlyphId e, em particular, os objetos dessa classe abstrata GlyphId são passados ​​na função da biblioteca para acesso ao glifo necessário. Assim, para obter o glifo necessário, crie um objeto do tipo GlyphUInt32Id ou GlyphStringId e, em seguida, passe o objeto criado para uma das funções concebidas para recuperar glifos.

Na maioria dos casos, você não sabe qual identificador de glifo corresponde ao caráter específico, para obter o identificador de glifos, você precisa encontrar a relação entre o código do caractere e o identificador de glifos.

Como foi mencionado acima, a codificação de fontes é responsável por essas relações. A funcionalidade de codificação da fonte básica é definida pela interface ifOntecoding.

A interface base IFont implementada por todas as classes de fonte define a propriedade Encoding do tipo IFontEncoding, pelo que qualquer objeto de fonte criado pela biblioteca Aspose.Font fornece implementação para a funcionalidade IFontEncoding pela propriedade Encoding.

Os próximos métodos foram projetados para calcular o identificador de glifos para um código de caractere: unicodetogid (), decodetogid e decodEtogidParameterizado:

Depois de obter um identificador de glifos ou, em outras palavras, uma referência ao objetoglifídeo, você pode associar o glifo a esseglifídeousando a funcionalidade, definida pela interface iglyphaccessor.

A interface IGlyphAccessor é implementada por qualquer classe, derivada da classe base Font, e é acessível pela propriedade IFont.GlyphAccessor.

A interface IGlyphAccessor define o método GetGlyphById(). Utilize este método para obter o glifo para GlyphId passado.

O exemplo de como utilizar o método GetGlyphById para obter o GlyphId e o glifo correspondente está incluído no exemplo do capítulo A funcionalidade fornecida pelo objeto Glyph.

Os próximos 2 métodos desta interface foram projetados para obter identificadores de glifos:

Além disso, a interface IGlyphAccessor define a propriedade GlyphIdType que nos indica qual o tipo de dados, inteiro ou string, que é o identificador do glifo.

O suporte para a recuperação de glifos é mais poderoso para as fontes TrueType. Aqui você pode encontrar as informações sobre como obter acesso aos glifos da fonte.

Todos os exemplos de uso do Aspose.font são armazenados em Aspose.font.examples.sln Solution, nas net-examples da documentação aspose.font

Se você tiver algum problema, poderá publicá -los na seção Aspose.font.product Family do fórum de suporte gratuito e dentro de poucas horas nossa equipe de suporte limpará tudo para você.

Have any questions about Aspose.Font?



Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.