Leer información de fuentes

Explora las métricas de fuentes con Aspose.Font API Solution para C++. Aprende los detalles de cada trazo, curva y matiz. Nuestra solución te permite trabajar sin esfuerzo con glifos, habilitándote a extraer información sobre las características únicas de cualquier fuente.

 

Sumérgete en un mundo de posibilidades tipográficas con Aspose.Font API Solution para C++ que te ofrece un conjunto de potentes funciones, incluyendo conversiones de fuentes, manipulación de glifos, detección de símbolos latinos y más. Nuestra API también te permite trabajar con glifos y obtener información sobre los glifos incluidos en una fuente. Eleva tus diseños, potencia tus proyectos y desbloquea el potencial completo de los glifos con Aspose.Font para C++. ¡No esperes y obtén una prueba gratuita!

Un glifo es un diseño único para un carácter o símbolo en una tipografía. Para comprender mejor esta unidad tipográfica, lee el artículo Introduction to Glyph . Las métricas de fuentes son medidas y especificaciones usadas para describir la apariencia visual de una tipografía. Estas métricas pueden incluir información como la altura de los caracteres, el ancho de los caracteres, el espaciado entre caracteres y la posición de la línea base, entre otros. Permiten a diseñadores y desarrolladores predecir con precisión el diseño del texto en documentos digitales e interfaces de usuario.

Esta página explica cómo recuperar diferentes métricas de fuentes como el número de glifos, la altura de letras, el ancho del glifo ‘A’, etc. Sin embargo, la funcionalidad completa de trabajo con glifos se describe en detalle en el artículo sobre el uso de objetos Glifo. El ejemplo de código incluye una sección sobre la recuperación de metadatos de fuentes, incluido el nombre de la fuente. Este tipo de funcionalidad puede integrarse en aplicaciones web, como la aplicación Font Metadata disponible en el ecosistema de Aspose. Si deseas aprender ejemplos completos y archivos de datos, visita el Github Project de Aspose.

Para obtener métricas de fuentes necesitamos:

  • Aspose.Font para C++ API, que es una API rica en funciones, poderosa y fácil de usar para manipulación y conversión de documentos.

  • Abre el gestor de paquetes NuGet, busca Aspose.Font e instálalo. También puedes usar el siguiente comando desde la Consola del Administrador de Paquetes.

Package Manager Console Command


    PM> Install-Package Aspose.Font

Pasos para obtener métricas de fuentes usando C++:

  1. Extrae información sobre una fuente creando una instancia de la clase TtfFont .
  2. Imprime el nombre de la fuente usando la propiedad FontName.
  3. Imprime el número de glifos en la fuente usando la propiedad NumGlyphs. También se imprimen las métricas de la fuente, como ascendente, descendente, ascendente tipográfico, descendente tipográfico y UnitsPerEm.
  4. El código luego recupera la tabla de codificación Unicode cmap de la fuente, que se usa para mapear códigos de caracteres a índices de glifos. Verifica si la fuente tiene tanto la tabla cmap como la tabla glyf, que se usa para acceder a los glifos. Si ambas tablas están presentes, recupera el índice glyf para el carácter A y luego obtiene el glifo del símbolo A.
  5. Imprime el cuadro delimitador del glifo A y su ancho.

Código C++ para obtener información sobre los glifos de la fuente

    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)));
            }
        }
    }