في المنشور السابق ، رأيت كيفية التحميل والعمل مع خطوط CFF و تروتايب و OpenType و Type1 من الداخل تطبيقات C++ الخاصة بك. تأخذك هذه المقالة خطوة إلى الأمام من خلال توضيح كيفية اكتشاف الرموز اللاتينية في خط برمجيًا باستخدام C++. بعد الكشف ، يمكنك تحديد ما إذا كان الخط يدعم الرموز اللاتينية أم لا.

واجهة برمجة تطبيقات C++ لاكتشاف الرموز اللاتينية في الخطوط

Aspose.Font for C++ هو واجهة برمجة تطبيقات للتعامل مع الخطوط وإدارتها والتي تتيح لك اكتشاف دعم الرموز اللاتينية في الخطوط بسهولة تامة. يمكنك إما تنزيل API أو تثبيته عبر NuGet.

PM> Install-Package Aspose.Font.Cpp

كشف الرموز اللاتينية في خطوط TrueType في C++

إن اكتشاف دعم الرموز اللاتينية باستخدام Aspose.Font لـ C++ بسيط مثل الفطيرة. فيما يلي خطوات التحقق مما إذا كان خط TrueType معين يدعم الرموز اللاتينية أم لا.

  • قم بإنشاء كائن من فئة FontDefinition لتحميل الخط بتحديد نوعه كـ TrueType.
  • قم بإنشاء كائن من فئة TtfFont للوصول إلى معلومات الخط.
  • قم بإجراء حلقة من خلال الرموز المحتملة وفك تشفيرها إلى معرفات الحروف الرسومية.
  • قم بمطابقة معرّفات الحروف الرسومية للتحقق مما إذا كانت الرموز اللاتينية مدعومة في خط 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++. تتيح لك نماذج التعليمات البرمجية في هذه المقالة تحديد ما إذا كانت الرموز اللاتينية مدعومة بخط معين أم لا. يمكنك معرفة المزيد حول واجهة برمجة تطبيقات معالجة الخطوط في C++ باستخدام التوثيق.

أنظر أيضا