الخطوط هي جزء لا يتجزأ من المستندات الرقمية وصفحات الويب المستخدمة لتحديد مظهر النص. تُستخدم ملفات الخطوط لتخزين معلومات حول الخطوط مثل الأنماط والوزن والحجم وما إلى ذلك. قد تكون هناك حالة عندما تحتاج إلى معالجة الخطوط لاستخراج معلوماتها. لمثل هذه السيناريوهات ، في هذه المقالة ، ستتعلم كيفية تحميل وقراءة المعلومات من خطوط TrueType و CFF و Type1 باستخدام C++.

مكتبة معالجة الخط C++

Aspose.Font for C++ هي واجهة برمجة تطبيقات فعالة لمعالجة الخطوط تسمح لك بالعمل مع TrueType و CFF و OpenType و Type1 و EOT والعديد من الخطوط الأخرى من داخل تطبيقات C++. يمكنك تحميل وحفظ واستخراج معلومات الترميز من الخطوط وكذلك العمل مع الحروف الرسومية. يمكن تنزيل واجهة برمجة التطبيقات من قسم التنزيلات أو تثبيتها عبر NuGet.

قم بتحميل خطوط CFF و TrueType و Type1 باستخدام C++

يتيح لك Aspose.Font لـ C++ تحميل خطوط CFF و TrueType و Type1 من الملفات الموجودة على وسائط التخزين الخاصة بك. فيما يلي خطوات تحميل الخط.

  • قم بإنشاء كائن من فئة FontDefinition لتحميل الخط عن طريق تحديد نوعه ، مثل TrueType ، Type1 ، إلخ.
  • استخدم فئة CffFont أو TtfFont أو Type1Font لفتح خطوط CFF و TrueType و Type1 على التوالي من كائن FontDefinition.

قم بتحميل خطوط CFF باستخدام C++

يُظهر نموذج التعليمات البرمجية التالي كيفية تحميل خطوط CFF باستخدام C++.

For complete examples and data files, please go to https://github.com/aspose-font/Aspose.Font-for-C
System::String fileName = dataDir + u"OpenSans-Regular.cff";
//اسم ملف الخط بالمسار الكامل
    
System::SharedPtr<FontDefinition> fd = System::MakeObject<FontDefinition>(Aspose::Font::FontType::CFF, System::MakeObject<FontFileDefinition>(u"cff", System::MakeObject<FileSystemStreamSource>(fileName)));
System::SharedPtr<CffFont> ttfFont = System::DynamicCast_noexcept<Aspose::Font::Cff::CffFont>(Aspose::Font::Font::Open(fd));

قم بتحميل خطوط TrueType باستخدام C++

يُظهر نموذج التعليمات البرمجية التالي كيفية تحميل خطوط 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));

تحميل خطوط Type1 باستخدام C++

يُظهر نموذج التعليمات البرمجية التالي كيفية تحميل خطوط 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));

استخراج مقاييس الخط من TrueType أو Type1 باستخدام C++

يتيح لك Aspose.Font لـ C++ أيضًا استخراج مقاييس الخط التي تحتوي على معلومات مثل Ascender و Descender و TypoAscender و TypoDescender و UnitsPerEm. فيما يلي خطوات استرداد مقاييس الخط من خط TrueType أو Type1.

  • قم بإنشاء كائن من فئة FontDefinition لتحميل خط TrueType أو Type1.
  • افتح الخط باستخدام فئة TtfFont أو Type1Font وفقًا لنوع الخط.
  • استخراج معلومات مقاييس الخط.

احصل على مقاييس الخط من TrueType Font باستخدام 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> 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);
    
//احصل على جدول ترميز cmap unicode من الخط ككائن TtfCMapFormatBaseTable للوصول إلى معلومات حول الحرف الرسومي للخط للرمز 'A'.
//تحقق أيضًا من أن الخط يحتوي على كائن TtfGlyfTable (جدول 'glyf') للوصول إلى الصورة الرمزية.
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());
    
    //رمز للرمز "أ"
    char16_t unicode = (char16_t)65;
    
    //فهرس الحرف الرسومي لـ "A"
    uint32_t glIndex = cmapTable->GetGlyphIndex(unicode);
    
    if (glIndex != static_cast<uint32_t>(0))
    {
        //Glyph لـ "A"
        System::SharedPtr<Glyph> glyph = font->GetGlyphById(glIndex);
        if (glyph != nullptr)
        {
            //مقاييس طباعة الصورة الرمزية
            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)));
        }
    }
}

استخراج مقاييس الخط من Type1 Font باستخدام 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));
    
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);

استنتاج

في هذه المقالة ، تعلمت كيفية تحميل خطوط CFF و TrueType و Type1 واستخراج معلوماتها باستخدام C++. يمكنك استكشاف المزيد حول C++ Font Manipulation API باستخدام التوثيق.