Ler informações da fonte

Explore métricas de fonte com a solução Aspose.Font API para C++. Aprenda detalhes sobre cada traço, curva e nuance. A nossa solução permite‑lhe trabalhar facilmente com glifos, capacitando‑o a extrair informações sobre as características únicas de qualquer fonte.

 

Mergulhe num mundo de possibilidades tipográficas com a solução Aspose.Font API para C++ que lhe oferece um conjunto de funcionalidades poderosas, incluindo conversões de fontes, manipulação de glifos, deteção de símbolos latinos e muito mais. A nossa API também lhe permite trabalhar com glifos e obter informações sobre os glifos incluídos numa fonte. Eleve os seus projetos, aumente a produtividade e desbloqueie todo o potencial dos glifos com Aspose.Font para C++. Não perca tempo e experimente a versão gratuita!

Um glifo é um desenho único para um carácter ou símbolo numa tipografia. Para compreender melhor esta unidade de fonte, leia o artigo Introdução ao Glifo . As métricas de fonte são medições e especificações usadas para descrever a aparência visual de uma tipografia. Estas métricas podem incluir informações como a altura dos caracteres, a largura dos caracteres, o espaçamento entre caracteres e a posição da linha de base, entre outras. Elas permitem a designers e programadores prever com precisão a disposição do texto em documentos digitais e interfaces de utilizador.

Esta página explica como obter diferentes métricas de fonte, como o número de glifos, a altura das letras, a largura do glifo ‘A’, etc. No entanto, a funcionalidade completa de trabalho com glifos está descrita em detalhe no artigo Usando objetos Glifo. O exemplo de código inclui uma secção sobre a obtenção de metadados da fonte, incluindo o nome da fonte. Este tipo de funcionalidade pode ser integrado em aplicações web, como a aplicação Font Metadata disponível no ecossistema Aspose. Se quiser aprender exemplos completos e ficheiros de dados, por favor, aceda ao Aspose Projeto Github .

Para obter métricas de fonte precisamos de:

  • Aspose.Font para API C++ que é uma API rica em funcionalidades, poderosa e fácil de usar para manipulação e conversão de documentos.

  • Abra o gestor de pacotes NuGet e procure por Aspose.Font e instale. Também pode usar o seguinte comando a partir da Consola do Gestor de Pacotes.

Package Manager Console Command


    PM> Install-Package Aspose.Font

Passos para obter métricas de fonte usando C++:

  1. Extrair informações sobre uma fonte criando uma instância da classe TtfFont .
  2. Imprimir o nome da fonte usando a propriedade FontName.
  3. Imprimir o número de glifos na fonte usando a propriedade NumGlyphs. As métricas de fonte, como ascendente, descendente, ascendente tipográfico, descendente tipográfico e UnitsPerEm, também são impressas.
  4. O código então recupera a tabela de codificação unicode cmap da fonte, que é usada para mapear códigos de caracteres para índices de glifos. Verifica se a fonte tem tanto a tabela cmap quanto a tabela glyf, que é usada para aceder aos glifos. Se ambas as tabelas estiverem presentes, recupera o índice glyf para o carácter A e depois obtém o glifo para o símbolo A.
  5. Imprimir a caixa delimitadora do glifo A e a sua largura.

Código C++ para obter informações sobre os glifos da fonte

    using Aspose::Font;
    using Aspose::Font::Glyphs;
    using Aspose::Font::Ttf;
    //Font file name with the full path
    
    System::SharedPtr<FontDefinition> fd = System::MakeObject<FontDefinition>(Aspose::Font::FontType::TTF, System::MakeObject<FontFileDefinition>(u"ttf", System::MakeObject<FileSystemStreamSource>(fileName)));
    System::SharedPtr<TtfFont> font = System::DynamicCast_noexcept<Aspose::Font::Ttf::TtfFont>(Aspose::Font::Font::Open(fd));
    
    System::String name = font->get_FontName();
    System::Console::WriteLine(System::String(u"Font name: ") + name);
    System::Console::WriteLine(System::String(u"Glyph count: ") + font->get_NumGlyphs());
    System::String metrics = System::String::Format(u"Font metrics: ascender - {0}, descender - {1}, typo ascender = {2}, typo descender = {3}, UnitsPerEm = {4}", font->get_Metrics()->get_Ascender(), font->get_Metrics()->get_Descender(), font->get_Metrics()->get_TypoAscender(), font->get_Metrics()->get_TypoDescender(), font->get_Metrics()->get_UnitsPerEM());
    
    System::Console::WriteLine(metrics);
    
    //Get cmap unicode encoding table from the font as object TtfCMapFormatBaseTable to access the information about the font glyph for symbol 'A'.
    //Also check that font has object TtfGlyfTable (table 'glyf') to access glyph.
    System::SharedPtr<Aspose::Font::TtfCMapFormats::TtfCMapFormatBaseTable> cmapTable;
    if (font->get_TtfTables()->get_CMapTable() != nullptr)
    {
        cmapTable = font->get_TtfTables()->get_CMapTable()->FindUnicodeTable();
    }
    if (cmapTable != nullptr && font->get_TtfTables()->get_GlyfTable() != nullptr)
    {
        System::Console::WriteLine(System::String(u"Font cmap unicode table: PlatformID = ") + cmapTable->get_PlatformId() + u", PlatformSpecificID = " + cmapTable->get_PlatformSpecificId());
    
        //Code for 'A' symbol
        char16_t unicode = (char16_t)65;
    
        //Glyph index for 'A'
        uint32_t glIndex = cmapTable->GetGlyphIndex(unicode);
    
        if (glIndex != static_cast<uint32_t>(0))
        {
            //Glyph for 'A'
            System::SharedPtr<Glyph> glyph = font->GetGlyphById(glIndex);
            if (glyph != nullptr)
            {
                //Print glyph metrics
                System::Console::WriteLine(u"Glyph metrics for 'A' symbol:");
                System::String bbox = System::String::Format(System::String(u"Glyph BBox: Xmin = {0}, Xmax = {1}") + u", Ymin = {2}, Ymax = {3}", glyph->get_GlyphBBox()->get_XMin(), glyph->get_GlyphBBox()->get_XMax(), glyph->get_GlyphBBox()->get_YMin(), glyph->get_GlyphBBox()->get_YMax());
                System::Console::WriteLine(bbox);
                System::Console::WriteLine(System::String(u"Width:") + font->get_Metrics()->GetGlyphWidth(System::MakeObject<GlyphUInt32Id>(glIndex)));
            }
        }
    }