อ่านข้อมูลฟอนต์

สำรวจเมตริกซ์ฟอนต์ด้วย Aspose.Font API Solution สำหรับ C++ เรียนรู้ข้อมูลเชิงลึกเกี่ยวกับทุกเส้น, โค้ง, และความละเอียด โซลูชันของเราให้คุณทำงานกับ glyphs ได้อย่างง่ายดาย ช่วยให้คุณดึงข้อมูลลักษณะเฉพาะของฟอนต์ใดก็ได้

 

ดำดิ่งสู่โลกของความเป็นไปได้ของฟอนต์กับ Aspose.Font API Solution สำหรับ C++ ซึ่งมอบชุดคุณสมบัติที่ทรงพลังให้คุณ ได้แก่ การแปลงฟอนต์, การจัดการ glyphs, การตรวจจับสัญลักษณ์ละติน และอื่น ๆ อีกมากมาย API ของเรายังทำให้คุณสามารถทำงานกับ glyphs และรับข้อมูลเกี่ยวกับ glyphs ที่รวมอยู่ในฟอนต์ ยกระดับการออกแบบของคุณ, เพิ่มพลังให้โครงการของคุณ, และปลดล็อกศักยภาพเต็มของ glyphs ด้วย Aspose.Font สำหรับ C++ อย่ารอช้าและรับทดลองใช้ฟรี!

Glyph คือการออกแบบที่เป็นเอกลักษณ์สำหรับตัวอักษรหรือสัญลักษณ์ในแบบอักษร เพื่อทำความเข้าใจหน่วยฟอนต์นี้ให้ดียิ่งขึ้น อ่านบทความ การแนะนำ Glyph เมตริกซ์ฟอนต์เป็นการวัดและสเปคที่ใช้บรรยายลักษณะการมองเห็นของแบบอักษรเมตริกซ์เหล่านี้อาจรวมข้อมูลเช่น ความสูงของอักษร, ความกว้างของอักษร, ระยะห่างระหว่างอักษร, และตำแหน่งของเส้นฐาน เป็นต้น ซึ่งช่วยให้นักออกแบบและนักพัฒนาซอฟต์แวร์คาดการณ์การจัดวางข้อความในเอกสารดิจิทัลและอินเทอร์เฟซผู้ใช้ได้อย่างแม่นยำ

หน้านี้อธิบายวิธีดึงเมตริกซ์ฟอนต์ต่าง ๆ เช่น จำนวน glyphs, ความสูงของตัวอักษร, ความกว้างของ glyph ‘A’ เป็นต้น อย่างไรก็ตาม ฟังก์ชันการทำงานเต็มรูปแบบของการทำงานกับ glyphs ถูกอธิบายอย่างละเอียดในบทความ Using Glyph objects ตัวอย่างโค้ดรวมส่วนที่ดึงเมตาดาต้าฟอนต์รวมถึงชื่อฟอนต์ ฟังก์ชันประเภทนี้สามารถรวมเข้ากับแอปพลิเคชันเว็บได้ เช่น แอป เมตาดาต้าฟอนต์ ที่มีในระบบนิเวศของ Aspose หากต้องการเรียนรู้ตัวอย่างครบถ้วนและไฟล์ข้อมูล โปรดไปที่ Aspose โครงการ Github

เพื่อรับเมตริกซ์ฟอนต์ เราต้องการ:

  • Aspose.Font สำหรับ C++ API ซึ่งเป็น API การจัดการเอกสารและการแปลงที่มีคุณสมบัติครบเครื่อง, มีพลัง, และใช้งานง่าย

  • เปิด NuGet package manager แล้วค้นหา Aspose.Font แล้วติดตั้ง คุณยังสามารถใช้คำสั่งต่อไปนี้จาก Package Manager Console

Package Manager Console Command


    PM> Install-Package Aspose.Font

ขั้นตอนการรับเมตริกซ์ฟอนต์ด้วย C++:

  1. ดึงข้อมูลเกี่ยวกับฟอนต์โดยการสร้างอินสแตนซ์ของคลาส TtfFont
  2. พิมพ์ชื่อฟอนต์โดยใช้คุณสมบัติ FontName
  3. พิมพ์จำนวน glyphs ในฟอนต์โดยใช้คุณสมบัติ NumGlyphs เมตริกซ์ฟอนต์ เช่น ascender, descender, typo ascender, typo descender, และ UnitsPerEm จะถูกพิมพ์ออกมาด้วยเช่นกัน
  4. โค้ดจะดึงตารางการเข้ารหัสยูนิโค้ด cmap จากฟอนต์ ซึ่งใช้เพื่อแมปโค้ดอักขระไปยังดัชนี glyphs มันตรวจสอบว่าฟอนต์มีทั้งตาราง cmap และตาราง glyf ซึ่งใช้เพื่อเข้าถึง glyphs หากทั้งสองตารางมีอยู่ มันจะดึงดัชนี glyf สำหรับอักขระ A แล้วดึง glyph สำหรับสัญลักษณ์ A นี้
  5. พิมพ์ bounding box ของ glyph A และความกว้างของมัน

โค้ด C++ เพื่อรับข้อมูลเกี่ยวกับ glyphs ของฟอนต์

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