Чтение информации о глифах и метриках

C++ API Solution для расчета ширины строки, вычисления координат глифов и других манипуляций с глифами.

 

Aspose.Font API предлагает широкий спектр функций, связанных со шрифтами, включая преобразование, манипулирование глифами, обнаружение латинских символов и многое другое. Некоторые из этих функций относятся к манипулированию глифами, которые являются отдельными символами шрифта или графическими представлениями символов/символов. Чтобы узнать больше об этих единицах шрифта, обратитесь к статье Introduction to Glyph .

На этой странице описывается возможность чтения информации о глифе и метриках, но для полного понимания функциональности обратитесь к статье Использование объектов глифа . Здесь вы найдете множество примеров кода C++ и узнаете о возможностях Aspose.Font для работы с глифами и объектами Glyph. Дополнительные примеры кода, демонстрирующие использование Aspose.Font для управления глифами, можно найти в Aspose Github Project .

Метрики глифа, используемый здесь термин, относятся к информации и измерениям конкретного глифа в шрифте. Они могут включать такую ​​информацию, как высота, ширина, предварительная ширина и другие размеры глифа, которые важны для правильного позиционирования и интервалов между символами в шрифте. Эти метрики используются системами компоновки текста и рендеринга для обеспечения последовательного и точного отображения текста.

Для работы с глифами нам понадобится:

  • Aspose.Font for C++ API — многофункциональный, мощный и простой в использовании API для обработки и преобразования документов.

  • Откройте диспетчер пакетов NuGet, найдите Aspose.Font и установите его. Вы также можете использовать следующую команду из консоли диспетчера пакетов.

Package Manager Console Command


    PM> Install-Package Aspose.Font

Шаги для вычисления ширины строки с использованием С++:

Чтобы вычислить ширину строки с помощью глифов, вам нужно сначала определить ширину каждого отдельного глифа в строке, а затем просуммировать эти ширины, чтобы получить общее число. Если объяснить это шагами, то порядок следующий:

  1. Определите шрифт и размер, которые вы хотите использовать для расчета ширины строки.
  2. Для каждого символа в строке определите соответствующий глиф в шрифте. Используйте карту символов, которая даст вам индекс соответствующего глифа.
  3. Используя индекс глифа, найдите метрики для глифа в таблице метрик шрифта. Метрики глифа обычно включают его ширину, высоту и расширенную ширину.
  4. Сложите расширенную ширину всех глифов в строке, чтобы получить общую ширину строки. Обратите внимание на информацию о кернинге.

При описании аналогичного процесса кодом на 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 System::String text = u"Hello world";
        const int32_t fontSize = 10;
    
        //Declare the variable for string width
        double width = 0;
    
        //Get glyph for each letter in text and calculate width for whole text.
        //The same result can be achieved using method font.Metrics.MeasureString(text, fontSize).
        for (char16_t symbol : text)
        {
            System::SharedPtr<GlyphId> gid = this->_font->get_Encoding()->DecodeToGid(symbol);
            System::SharedPtr<Glyph> glyph = this->_font->GetGlyphById(gid);
            width += (glyph->get_WidthVectorX() / this->_font->get_Metrics()->get_UnitsPerEM()) * fontSize;
        }
	    font->get_Metrics()->MeasureString(text, width);

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

Шаги для вычисления всех точек глифов с координатами с использованием C++:

  1. Объявите список points типа System::Drawing::Point: этот список будет хранить точки сегмент пути глифа..
  2. Укажите ссылку на службу Init в интерфейсе IPathSegment .
  3. Повторите все сегменты пути глифа и просуммируйте точки.

Код С++ для определения точек глифов

    //Declare the resultant list with points
    System::SharedPtr<System::Collections::Generic::List<System::Drawing::Point>> points =
    System::MakeObject<System::Collections::Generic::List<System::Drawing::Point>>();
    
    //Init the service reference on IPathSegment
    System::SharedPtr<IPathSegment> prevSegment;
    
    //Iterate all the glyph path segments and collect points
    for (auto&& segment : glyph->get_Path()->get_Segments())
    {
        if ((System::ObjectExt::Is<LineTo>(segment)) || (System::ObjectExt::Is<CurveTo>(segment)))
        {
            if (System::ObjectExt::Is<MoveTo>(prevSegment))
            {
                System::SharedPtr<MoveTo> moveTo = System::DynamicCast_noexcept<Aspose::Font::RenderingPath::MoveTo>(prevSegment);
                AddPoint((int32_t)moveTo->get_X(), (int32_t)moveTo->get_Y(), points);
            }
            if (System::ObjectExt::Is<LineTo>(segment))
            {
                System::SharedPtr<LineTo> line = System::DynamicCast_noexcept<Aspose::Font::RenderingPath::LineTo>(segment);
                AddPoint((int32_t)line->get_X(), (int32_t)line->get_Y(), points);
            }
            else if (System::ObjectExt::Is<CurveTo>(segment))
            {
                System::SharedPtr<CurveTo> curve = System::DynamicCast_noexcept<Aspose::Font::RenderingPath::CurveTo>(segment);
                AddPoint((int32_t)curve->get_X1(), (int32_t)curve->get_Y1(), points);
                AddPoint((int32_t)curve->get_X2(), (int32_t)curve->get_Y2(), points);
                AddPoint((int32_t)curve->get_X3(), (int32_t)curve->get_Y3(), points);
            }
        }
        prevSegment = segment;
    }



Часто задаваемые вопросы

1. Что такое метрика глифа?

Метрики глифа — это параметры, влияющие на расположение глифа при создании макета текста.

2. Что такое мертики глифов?

Наиболее часто используемые метрики глифов — это ширина продвижения, начало координат, боковые азимуты, базовая линия, восхождение, восхождение, спуск, спуск, ограничительная рамка, высота, ширина и кернинг.

3. Как управлять глифами с помощью этого API-решения?

Чтобы кодировать глифы на C#, используйте сущности пространства имен Aspose.Font.Glyphs .

4. В чем важность показателей глифов?

Понимая и правильно корректируя параметры глифов, типографы и дизайнеры могут обеспечить оптимальные интервалы, выравнивание и читаемость текста в печатных материалах, цифровых интерфейсах или веб-страницах.