Fonts بخشی جدایی ناپذیر از اسناد دیجیتال و صفحات وب هستند که برای تعریف ظاهر متن استفاده می شوند. از فایل‌های فونت برای ذخیره اطلاعات مربوط به فونت‌ها مانند سبک، وزن، اندازه و غیره استفاده می‌شود. ممکن است برای استخراج اطلاعات فونت‌ها را دستکاری کنید. برای چنین سناریوهایی، در این مقاله، نحوه بارگذاری و خواندن اطلاعات از فونت های TrueType، CFF، و Type1 را با استفاده از C++ یاد خواهید گرفت.

کتابخانه دستکاری فونت C++

Aspose.Font for C++ یک API دستکاری فونت قدرتمند است که به شما امکان می دهد با TrueType، CFF، OpenType و Type1 کار کنید. ، EOT، و بسیاری قلم‌های دیگر از داخل برنامه‌های ++C شما. می‌توانید اطلاعات رمزگذاری را از فونت‌ها بارگیری، ذخیره و استخراج کنید و همچنین با حروف نگارشی کار کنید. API را می توان از بخش دانلودها دانلود کرد یا از طریق NuGet نصب کرد.

فونت های CFF، TrueType و Type1 را با استفاده از C++ بارگیری کنید

Aspose.Font for 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));

متریک فونت را با استفاده از C++ از TrueType یا Type1 استخراج کنید

Aspose.Font برای C++ همچنین به شما امکان می دهد متریک های فونت را استخراج کنید که حاوی اطلاعاتی مانند Ascender، Descender، TypoAscender، TypoDescender و UnitsPerEm است. مراحل زیر برای بازیابی متریک فونت از فونت TrueType یا Type1 است.

  • یک شی از کلاس FontDefinition برای بارگیری فونت TrueType یا Type1 ایجاد کنید.
  • فونت را با استفاده از کلاس TtfFont یا Type1Font با توجه به نوع فونت باز کنید.
  • اطلاعات متریک فونت را استخراج کنید.

متریک فونت را از فونت 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> 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 را از فونت به عنوان شی 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());
    
    //کد برای نماد "A".
    char16_t unicode = (char16_t)65;
    
    //شاخص گلیف برای 'A'
    uint32_t glIndex = cmapTable->GetGlyphIndex(unicode);
    
    if (glIndex != static_cast<uint32_t>(0))
    {
        //گلیف برای "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 با استفاده از 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 بیشتر کاوش کنید.