בפוסט הקודם, ראית כיצד לטעון ולעבוד עם גופנים CFF, TrueType, OpenType ו-Type1 מבפנים יישומי C++ שלך. מאמר זה לוקח אותך צעד אחד קדימה על ידי הדגמה כיצד לזהות את הסמלים הלטיניים בגופן באופן תוכנתי באמצעות C++. לאחר הזיהוי, תוכל להחליט אם גופן תומך בסמלים הלטיניים או לא.

C++ API לזיהוי סמלים לטיניים בגופנים

Aspose.Font for C++ הוא ממשק API למניפולציה וניהול של גופנים המאפשר לך לזהות תמיכה בסמלים לטיניים בגופנים די בקלות. אתה יכול להוריד את ה-API או להתקין אותו באמצעות NuGet.

PM> Install-Package Aspose.Font.Cpp

זיהוי סמלים לטיניים בגופני TrueType ב-C++

זיהוי התמיכה בסמלים לטיניים באמצעות Aspose.Font עבור C++ הוא פשוט כמו עוגה. להלן השלבים כדי לבדוק אם גופן TrueType מסוים תומך בסמלים לטיניים או לא.

  • צור אובייקט במחלקה FontDefinition כדי לטעון את הגופן על ידי ציון הסוג שלו כ-TrueType.
  • צור אובייקט של מחלקה TtfFont כדי לגשת למידע של הגופן.
  • עברו בלולאה בין הקודים האפשריים ופענחו אותם למזהי גליפים.
  • התאם את מזהי הגליפים כדי לבדוק אם סמלים לטיניים נתמכים בגופן המקור של TrueType או לא.

דוגמת הקוד הבאה מראה כיצד לזהות סמלים לטיניים בגופני TrueType באמצעות C++.

For complete examples and data files, please go to https://github.com/aspose-font/Aspose.Font-for-C
System::String fileName = dataDir + u"Montserrat-Regular.ttf";
//שם קובץ גופן עם נתיב מלא
    
System::SharedPtr<FontDefinition> fd = System::MakeObject<FontDefinition>(Aspose::Font::FontType::TTF, System::MakeObject<FontFileDefinition>(u"ttf", System::MakeObject<FileSystemStreamSource>(fileName)));
System::SharedPtr<TtfFont> ttfFont = System::DynamicCast_noexcept<Aspose::Font::Ttf::TtfFont>(Aspose::Font::Font::Open(fd));
    
bool latinText = true;
    
    
for (uint32_t code = 65; code < static_cast<uint32_t>(123); code++)
{
    System::SharedPtr<GlyphId> gid = ttfFont->get_Encoding()->DecodeToGid(code);
    if (gid == nullptr || gid == System::StaticCast<System::Object>(GlyphUInt32Id::get_NotDefId()))
    {
        latinText = false;
    }
}
    
if (latinText)
{
    System::Console::WriteLine(System::String::Format(u"Font {0} supports latin symbols.", ttfFont->get_FontName()));
}
else
{
    System::Console::WriteLine(System::String::Format(u"Latin symbols are not supported by font {0}.", ttfFont->get_FontName()));
}

זיהוי סמלים לטיניים בגופנים מסוג Type1 ב-C++

התהליך של זיהוי סמלים לטיניים בגופני Type1 זהה לזה שעשית עבור גופני TrueType. ההבדל היחיד הוא השימוש במחלקה Type1Font. השלבים הבאים מדגימים את התהליך המלא של זיהוי סמלים לטיניים בגופנים מסוג Type1.

  • השתמש במחלקה FontDefinition כדי לטעון את הגופן על ידי ציון הסוג שלו כ-Type1.
  • השתמש במחלקה Type1Font כדי לגשת למידע של הגופן.
  • עברו בלולאה בין הקודים האפשריים ופענחו אותם למזהי גליפים.
  • התאם את מזהי הגליפים כדי לבדוק את התמיכה בסמלים לטיניים בגופן Type1 המסופק.

דוגמת הקוד הבאה מראה כיצד לזהות סמלים לטיניים בגופן Type1 באמצעות C++.

For complete examples and data files, please go to https://github.com/aspose-font/Aspose.Font-for-C
System::String fileName = dataDir + u"courier.pfb";
//שם קובץ גופן עם נתיב מלא
    
System::SharedPtr<FontDefinition> fd = System::MakeObject<FontDefinition>(Aspose::Font::FontType::Type1, System::MakeObject<FontFileDefinition>(u"pfb", System::MakeObject<FileSystemStreamSource>(fileName)));
System::SharedPtr<Type1Font> font = System::DynamicCast_noexcept<Aspose::Font::Type1::Type1Font>(Aspose::Font::Font::Open(fd));
    
bool latinText = true;
    
    
for (uint32_t code = 65; code < static_cast<uint32_t>(123); code++)
{
    System::SharedPtr<GlyphId> gid = font->get_Encoding()->DecodeToGid(code);
    if (gid == nullptr || gid == System::StaticCast<System::Object>(GlyphUInt32Id::get_NotDefId()))
    {
        latinText = false;
    }
}
    
if (latinText)
{
    System::Console::WriteLine(System::String::Format(u"Font {0} supports latin symbols.", font->get_FontName()));
}
else
{
    System::Console::WriteLine(System::String::Format(u"Latin symbols are not supported by font {0}.", font->get_FontName()));
}

סיכום

במאמר זה, למדת כיצד לזהות סמלים לטיניים בגופני TrueType ו-Type1 באמצעות C++. דוגמאות הקוד במאמר זה מאפשרות לך לקבוע אם הסמלים הלטיניים נתמכים על ידי גופן מסוים או לא. אתה יכול ללמוד עוד על ממשק ה-API של C++ למניפולציה של גופנים באמצעות תיעוד.

ראה גם