อ่านข้อมูลแบบอักษร
สำรวจการวัดแบบอักษรด้วยโซลูชัน Aspose.Font API สำหรับ C++ เรียนรู้ข้อมูลเชิงลึกโดยละเอียดเกี่ยวกับทุกจังหวะ เส้นโค้ง และความแตกต่างเล็กน้อย โซลูชันของเราช่วยให้คุณทำงานกับสัญลักษณ์ได้อย่างง่ายดาย ทำให้คุณสามารถดึงข้อมูลเกี่ยวกับลักษณะเฉพาะของแบบอักษรใดๆ ได้
ดำดิ่งสู่โลกแห่งความเป็นไปได้ของแบบอักษรด้วยโซลูชัน Aspose.Font API สำหรับ C++ ซึ่งมอบชุดคุณสมบัติอันทรงพลังให้กับคุณ รวมถึงการแปลงแบบอักษร การจัดการสัญลักษณ์ การตรวจจับสัญลักษณ์ละติน และอื่นๆ API ของเรายังช่วยให้คุณทำงานกับสัญลักษณ์ต่างๆ และรับข้อมูลเกี่ยวกับสัญลักษณ์ต่างๆ ที่รวมอยู่ในแบบอักษรได้ ยกระดับการออกแบบของคุณ เพิ่มพลังให้กับโปรเจ็กต์ของคุณ และปลดล็อกศักยภาพสูงสุดของสัญลักษณ์ด้วย Aspose.Font สำหรับ C++ อย่ารอช้าและทดลองใช้ฟรี!
สัญลักษณ์คือการออกแบบเฉพาะสำหรับอักขระหรือสัญลักษณ์ในแบบอักษร เพื่อให้เข้าใจหน่วยแบบอักษรนี้ได้ดีขึ้น โปรดอ่านบทความ อธิบายลักษณะที่ปรากฏของแบบอักษร เมตริกเหล่านี้อาจรวมถึงข้อมูลต่างๆ เช่น ความสูงของอักขระ ความกว้างของอักขระ ระยะห่างระหว่างอักขระ และตำแหน่งของบรรทัดฐาน และอื่นๆ ช่วยให้นักออกแบบและนักพัฒนาซอฟต์แวร์คาดการณ์เค้าโครงของข้อความในเอกสารดิจิทัลและอินเทอร์เฟซผู้ใช้ได้อย่างแม่นยำ
หน้านี้อธิบายวิธีเรียกเมตริกแบบอักษรต่างๆ เช่น จำนวนสัญลักษณ์ ความสูงของตัวอักษร ความกว้างของสัญลักษณ์ ‘A’ เป็นต้น อย่างไรก็ตาม ฟังก์ชันการทำงานทั้งหมดของการทำงานกับสัญลักษณ์มีอธิบายโดยละเอียดในบทความ การใช้วัตถุสัญลักษณ์ ตัวอย่างโค้ดมีส่วนในการดึงข้อมูลเมตาของฟอนต์ รวมถึงชื่อฟอนต์ ฟังก์ชันประเภทนี้สามารถรวมเข้ากับเว็บแอปพลิเคชัน เช่น แอป Font Metadata ที่มีอยู่ในระบบนิเวศ Aspose หากคุณต้องการเรียนรู้ตัวอย่างและไฟล์ข้อมูลทั้งหมด โปรดไปที่ Aspose Github Project
ในการรับเมตริกแบบอักษร เราต้องการ:
Aspose.Font สำหรับ C++ API ซึ่งเป็น API การจัดการและการแปลงเอกสารที่มีคุณลักษณะหลากหลาย ทรงพลัง และใช้งานง่าย
เปิดตัวจัดการแพ็คเกจ NuGet และค้นหา Aspose.Font และติดตั้ง คุณสามารถใช้คำสั่งต่อไปนี้จาก Package Manager Console
Package Manager Console Command
PM> Install-Package Aspose.Font
ขั้นตอนในการรับเมตริกแบบอักษรโดยใช้ C++:
- แยกข้อมูลเกี่ยวกับแบบอักษรที่สร้างอินสแตนซ์ของคลาส TtfFont
- พิมพ์ชื่อฟอนต์โดยใช้คุณสมบัติ FontName
- พิมพ์จำนวนสัญลักษณ์ในแบบอักษรโดยใช้คุณสมบัติ NumGlyphs เมตริกแบบอักษร เช่น แอสเซนเดอร์, ดาวน์เดอร์, ไทโปแอสเซนเดอร์, ไทโปดาวน์เดอร์ และ UnitsPerEm จะถูกพิมพ์ด้วย
- จากนั้นโค้ดจะดึงตารางการเข้ารหัสยูนิโค้ด
cmap
จากฟอนต์ ซึ่งใช้ในการแมปโค้ดอักขระกับดัชนีสัญลักษณ์ จะตรวจสอบว่าแบบอักษรมีทั้งตารางcmap
และตารางglyf
ซึ่งใช้ในการเข้าถึงสัญลักษณ์หรือไม่ หากมีทั้งสองตาราง ตารางจะดึงดัชนีglyf
สำหรับอักขระA
จากนั้นจึงรับ glyph สำหรับสัญลักษณ์A
- พิมพ์กรอบของสัญลักษณ์
A
และความกว้างของมัน
รหัส C++ เพื่อรับข้อมูลเกี่ยวกับสัญลักษณ์ของแบบอักษร
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)));
}
}
}