อ่านข้อมูลฟอนต์
สำรวจเมตริกซ์ฟอนต์ด้วย 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++:
- ดึงข้อมูลเกี่ยวกับฟอนต์โดยการสร้างอินสแตนซ์ของคลาส TtfFont
- พิมพ์ชื่อฟอนต์โดยใช้คุณสมบัติ FontName
- พิมพ์จำนวน glyphs ในฟอนต์โดยใช้คุณสมบัติ NumGlyphs เมตริกซ์ฟอนต์ เช่น ascender, descender, typo ascender, typo descender, และ UnitsPerEm จะถูกพิมพ์ออกมาด้วยเช่นกัน
- โค้ดจะดึงตารางการเข้ารหัสยูนิโค้ด
cmapจากฟอนต์ ซึ่งใช้เพื่อแมปโค้ดอักขระไปยังดัชนี glyphs มันตรวจสอบว่าฟอนต์มีทั้งตารางcmapและตารางglyfซึ่งใช้เพื่อเข้าถึง glyphs หากทั้งสองตารางมีอยู่ มันจะดึงดัชนีglyfสำหรับอักขระAแล้วดึง glyph สำหรับสัญลักษณ์Aนี้ - พิมพ์ 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)));
}
}
}