قراءة معلومات الخط

استكشف مقاييس الخط مع حل Aspose.Font API للغة C++. تعلم التفاصيل الدقيقة لكل خط، ومنحنى، وتفصيل. يتيح لك حلنا التعامل بسهولة مع الرموز (glyphs)، مما يمكِّنك من استخراج المعلومات حول الخصائص الفريدة لأي خط.

 

اغمر نفسك في عالم من إمكانيات الخط مع حل Aspose.Font API للغة C++ الذي يوفر لك مجموعة من الميزات القوية، بما في ذلك تحويل الخطوط، التلاعب بالرموز، اكتشاف الرموز اللاتينية، والمزيد. تمكّنك واجهتنا أيضاً من العمل مع الرموز والحصول على معلومات حول الرموز الموجودة في الخط. ارتق بتصاميمك، وعزز مشروعاتك، واكتشف كامل إمكانات الرموز مع Aspose.Font للغة C++. لا تنتظر واحصل على نسخة تجريبية مجانية!

الرمز (glyph) هو تصميم فريد لحرف أو رمز في نوع الخط. لفهم هذه الوحدة الخطية بشكل أفضل، اقرأ مقالة Introduction to Glyph . مقاييس الخط هي قياسات ومواصفات تُستخدم لوصف المظهر البصري لنوع الخط. يمكن أن تشمل هذه المقاييس معلومات مثل ارتفاع الأحرف، عرض الأحرف، التباعد بين الأحرف، وموقع الخط الأساسي، من بين أمور أخرى. تتيح للمصممين ومطوري البرمجيات التنبؤ بدقة بتخطيط النص في المستندات الرقمية وواجهات المستخدم.

تشرح هذه الصفحة كيفية استرجاع مقاييس الخط المختلفة مثل عدد الرموز، ارتفاع الحرف، عرض الرمز ‘A’، إلخ. ومع ذلك، فإن الوظيفة الكاملة للعمل مع الرموز موضحة بالتفصيل في مقالة Using Glyph objects. يتضمن مثال الشيفرة جزءاً عن استرجاع بيانات تعريف الخط، بما في ذلك اسم الخط. يمكن دمج هذا النوع من الوظائف في تطبيقات الويب، مثل تطبيق Font Metadata المتاح في نظام Aspose. إذا كنت تريد الاطلاع على أمثلة كاملة وملفات البيانات، يرجى زيارة مشروع Aspose Github Project .

لتلقي مقاييس الخط نحتاج إلى:

  • Aspose.Font لواجهة C++ API التي تُعدّ واجهة غنية بالميزات، قوية وسهلة الاستخدام للتعامل مع المستندات وتحويلها.

  • افتح مدير حزم NuGet، وابحث عن Aspose.Font وقم بالتثبيت. يمكنك أيضاً استخدام الأمر التالي من وحدة التحكم الخاصة بمدير الحزم.

Package Manager Console Command


    PM> Install-Package Aspose.Font

خطوات الحصول على مقاييس الخط باستخدام C++:

  1. استخراج معلومات حول خط بإنشاء نسخة من فئة TtfFont .
  2. اطبع اسم الخط باستخدام الخاصية FontName.
  3. اطبع عدد الرموز في الخط باستخدام الخاصية NumGlyphs. كما يتم طباعة مقاييس الخط مثل الصاعد (ascender)، الهابط (descender)، الصاعد الطباعي (typo ascender)، الهابط الطباعي (typo descender)، ووحدات لكل EM (UnitsPerEm).
  4. بعد ذلك، تسترجع الشيفرة جدول الترميز Unicode cmap من الخط، الذي يُستخدم لتعيين رموز الأحرف إلى مؤشرات الرموز. تتحقق إذا ما كان الخط يحتوي على كل من جدول cmap وجدول glyf، الذي يُستخدم للوصول إلى الرموز. إذا كان كلا الجدولين موجودين، تسترجع مؤشر glyf للحرف A ثم تحصل على الرمز الخاص برمز A.
  5. اطبع الصندوق المحيط للرمز A وعرضه.

كود C++ للحصول على معلومات حول رموز الخط

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