API de gerenciamento de fontes .NET

Na tipografia digital, as fontes definem estilos particulares a serem usados para a aparência dos caracteres. Na maioria das vezes, as fontes são utilizadas nos documentos e nas páginas da web para estilizar o texto. Cada fonte é descrita em um arquivo que contém informações sobre tamanho, peso, estilos e codificação dos caracteres. Como as fontes são uma parte importante dos vários formatos de arquivo, o Aspose oferece uma API dedicada para lidar com a manipulação e renderização de tipos de fontes populares, incluindo TrueType, CFF, OpenType, e Tipo1. Neste artigo, você aprenderá como carregar, salvar e extrair informações de fontes usando C# com Aspose.Font for .NET.

API de manipulação de fontes .NET - Download gratuito

Aspose.Font for .NET é uma API local que permite implementar os recursos de gerenciamento de fontes usando C# em seus aplicativos .NET. Além de carregar, salvar e extrair informações da fonte, a API também permite renderizar o glifo ou texto, se necessário. Você pode baixar a API ou instalá-la em seus aplicativos .NET usando NuGet.

PM> Install-Package Aspose.Font

Carregar ou salvar fontes do arquivo usando C#

Você pode carregar uma fonte do arquivo armazenado em seu armazenamento digital para recuperar as informações da fonte. Aspose.Font para .NET expõe classes separadas para lidar com tipos específicos de fontes, ou seja, CFF, TrueType, etc. A seguir estão as etapas para carregar e salvar uma fonte.

  • Carregue a fonte do arquivo (usando o caminho do arquivo ou matriz de bytes) usando a classe FontDefinition.
  • Acesse as informações da fonte usando a classe CffFont, TtfFont ou Type1Font.
  • Salve o arquivo (se necessário).

Carregar e salvar fonte CFF

O exemplo de código a seguir mostra como carregar e salvar fontes CFF usando C#.

// Para exemplos completos e arquivos de dados, acesse https://github.com/aspose-font/Aspose.Font-for-.NET
//matriz de bytes para carregar a fonte de
string dataDir = RunExamples.GetDataDir_Data();

byte[] fontMemoryData = File.ReadAllBytes(dataDir + "OpenSans-Regular.cff");
FontDefinition fd = new FontDefinition(FontType.CFF, new FontFileDefinition("cff", new ByteContentStreamSource(fontMemoryData)));
CffFont cffFont = Aspose.Font.Font.Open(fd) as CffFont;

//Trabalhe com dados do objeto CffFont recém-carregado

//Salvar CffFont no disco
//Nome do arquivo de fonte de saída com caminho completo
string outputFile = RunExamples.GetDataDir_Data() + "OpenSans-Regular_out.cff";

cffFont.Save(outputFile);

Carregar e salvar fonte TrueType

O exemplo de código a seguir mostra como carregar e salvar fontes TrueType usando C#.

// Para exemplos completos e arquivos de dados, acesse https://github.com/aspose-font/Aspose.Font-for-.NET
//matriz de bytes para carregar a fonte de
string dataDir = RunExamples.GetDataDir_Data();
            
byte[] fontMemoryData = File.ReadAllBytes(dataDir + "Montserrat-Regular.ttf");
FontDefinition fd = new FontDefinition(FontType.TTF, new FontFileDefinition("ttf", new ByteContentStreamSource(fontMemoryData)));
TtfFont ttfFont = Aspose.Font.Font.Open(fd) as TtfFont;

//Trabalhe com dados do objeto TtfFont recém-carregado

//Salvar TtfFont no disco
//Nome do arquivo de fonte de saída com caminho completo
string outputFile = RunExamples.GetDataDir_Data() + "Montserrat-Regular_out.ttf";

ttfFont.Save(outputFile);

Carregar e salvar a fonte Type1

O exemplo de código a seguir mostra como carregar e salvar fontes Type1 usando C#.

// Para exemplos completos e arquivos de dados, acesse https://github.com/aspose-font/Aspose.Font-for-.NET
string fileName = dataDir + "courier.pfb"; //Font file name with full path

FontDefinition fd = new FontDefinition(FontType.Type1, new FontFileDefinition("pfb", new FileSystemStreamSource(fileName)));
Type1Font font = Aspose.Font.Font.Open(fd) as Type1Font;

Extrair métricas de fonte usando C#

Aspose.Font para .NET também permite que você recupere as informações de métricas de fonte, como Ascender, Descender, TypoAscender, TypoDescender e UnitsPerEm. A seguir estão os passos para fazê-lo.

  • Use a classe FontDefinition para carregar a fonte TrueType ou Type1 do arquivo.
  • Abra a fonte usando a respectiva classe de tipo de fonte, ou seja, Type1Font, TtfFont, etc.
  • Acesse as informações de métricas da fonte.

Os exemplos de código a seguir mostram como extrair métricas de fonte de fontes TrueType e Type1 usando C#.

Extrair métricas da fonte TrueType

// Para exemplos completos e arquivos de dados, acesse https://github.com/aspose-font/Aspose.Font-for-.NET
string fileName = dataDir + "Montserrat-Regular.ttf"; //Font file name with full path

FontDefinition fd = new FontDefinition(FontType.TTF, new FontFileDefinition("ttf", new FileSystemStreamSource(fileName)));
TtfFont font = Aspose.Font.Font.Open(fd) as TtfFont;

string name = font.FontName;
Console.WriteLine("Font name: " + name);
Console.WriteLine("Glyph count: " + font.NumGlyphs);
string metrics = string.Format(
    "Font metrics: ascender - {0}, descender - {1}, typo ascender = {2}, typo descender = {3}, UnitsPerEm = {4}",
    font.Metrics.Ascender, font.Metrics.Descender,
    font.Metrics.TypoAscender, font.Metrics.TypoDescender, font.Metrics.UnitsPerEM);

Console.WriteLine(metrics);

//Obtenha a tabela de codificação unicode cmap da fonte como objeto TtfCMapFormatBaseTable para acessar informações sobre o glifo de fonte para o símbolo 'A'.
//Verifique também se a fonte possui o objeto TtfGlyfTable (tabela 'glyf') para acessar o glifo.
Aspose.Font.TtfCMapFormats.TtfCMapFormatBaseTable cmapTable = null;
if (font.TtfTables.CMapTable != null)
{
    cmapTable = font.TtfTables.CMapTable.FindUnicodeTable();
}
if (cmapTable != null && font.TtfTables.GlyfTable != null)
{
    Console.WriteLine("Font cmap unicode table: PlatformID = " + cmapTable.PlatformId + ", PlatformSpecificID = " + cmapTable.PlatformSpecificId);

    //Código para o símbolo 'A'
    char unicode = (char)65;

    //Índice de glifo para 'A'
    uint glIndex = cmapTable.GetGlyphIndex(unicode);

    if (glIndex != 0)
    {
        //Glifo para 'A'
        Glyph glyph = font.GetGlyphById(glIndex);
        if (glyph != null)
        {
            //Imprimir métricas de glifo
            Console.WriteLine("Glyph metrics for 'A' symbol:");
            string bbox = string.Format(
                "Glyph BBox: Xmin = {0}, Xmax = {1}" + ", Ymin = {2}, Ymax = {3}",
                glyph.GlyphBBox.XMin, glyph.GlyphBBox.XMax,
                glyph.GlyphBBox.YMin, glyph.GlyphBBox.YMax);
            Console.WriteLine(bbox);
            Console.WriteLine("Width:" + font.Metrics.GetGlyphWidth(new GlyphUInt32Id(glIndex)));
        }
    }
}

Extrair métricas da fonte Type1

// Para exemplos completos e arquivos de dados, acesse https://github.com/aspose-font/Aspose.Font-for-.NET
string fileName = dataDir + "courier.pfb"; //Font file name with full path

FontDefinition fd = new FontDefinition(FontType.Type1, new FontFileDefinition("pfb", new FileSystemStreamSource(fileName)));
Type1Font font = Aspose.Font.Font.Open(fd) as Type1Font;

string name = font.FontName;
Console.WriteLine("Font name: " + name);
Console.WriteLine("Glyph count: " + font.NumGlyphs);
string metrics = string.Format(
    "Font metrics: ascender - {0}, descender - {1}, typo ascender = {2}, typo descender = {3}, UnitsPerEm = {4}",
    font.Metrics.Ascender, font.Metrics.Descender,
    font.Metrics.TypoAscender, font.Metrics.TypoDescender, font.Metrics.UnitsPerEM);

Console.WriteLine(metrics);

Detectar símbolos latinos em fontes usando C#

Você também pode detectar texto latino nas fontes decodificando os códigos de glifo usando Aspose.Font para .NET. A seguir estão as etapas para realizar esta operação.

  • Carregue a fonte do arquivo usando a classe FontDefinition.
  • Decodifique o GlyphId usando o método DecodeToGid() da respectiva classe de fonte.

Os exemplos de código a seguir mostram como decodificar símbolos latinos em fontes TrueType e Type1 usando C#.

Detectar símbolos latinos na fonte TrueType

// Para exemplos completos e arquivos de dados, acesse https://github.com/aspose-font/Aspose.Font-for-.NET
string fileName = dataDir + "Montserrat-Regular.ttf"; //Font file name with full path

FontDefinition fd = new FontDefinition(FontType.TTF, new FontFileDefinition("ttf", new FileSystemStreamSource(fileName)));
TtfFont ttfFont = Aspose.Font.Font.Open(fd) as TtfFont;

bool latinText = true;


for (uint code = 65; code < 123; code++)
{
    GlyphId gid = ttfFont.Encoding.DecodeToGid(code);
    if (gid == null || gid == GlyphUInt32Id.NotDefId)
    {
        latinText = false;
    }
}

if (latinText)
{
    Console.WriteLine(string.Format("Font {0} supports latin symbols.", ttfFont.FontName));
}
else
{
    Console.WriteLine(string.Format("Latin symbols are not supported by font {0}.", ttfFont.FontName));
}

Detectar símbolos latinos na fonte Type1

// Para exemplos completos e arquivos de dados, acesse https://github.com/aspose-font/Aspose.Font-for-.NET
string fileName = dataDir + "courier.pfb"; //Font file name with full path

FontDefinition fd = new FontDefinition(FontType.Type1, new FontFileDefinition("pfb", new FileSystemStreamSource(fileName)));
Type1Font font = Aspose.Font.Font.Open(fd) as Type1Font;

bool latinText = true;


for (uint code = 65; code < 123; code++)
{
    GlyphId gid = font.Encoding.DecodeToGid(code);
    if (gid == null || gid == GlyphUInt32Id.NotDefId)
    {
        latinText = false;
    }
}

if (latinText)
{
    Console.WriteLine(string.Format("Font {0} supports latin symbols.", font.FontName));
}
else
{
    Console.WriteLine(string.Format("Latin symbols are not supported by font {0}.", font.FontName));
}

Conclusão

Neste artigo, você viu como carregar e salvar fontes CFF, TrueType e Type1 programaticamente usando C#. Além disso, você aprendeu como extrair informações de métricas de fontes de fontes TrueType e Type1 em seus aplicativos .NET. Você pode explorar recursos mais interessantes oferecidos pelo Aspose.Font para .NET na documentação. Para mais atualizações, continue visitando Aspose.Font blog.