แบบอักษร เป็นส่วนสำคัญของเอกสารดิจิทัลและหน้าเว็บที่ใช้ในการกำหนดลักษณะที่ปรากฏของข้อความ ไฟล์ฟอนต์ใช้เพื่อเก็บข้อมูลเกี่ยวกับฟอนต์ เช่น สไตล์ น้ำหนัก ขนาด และอื่นๆ อาจมีบางกรณีที่คุณต้องจัดการฟอนต์เพื่อดึงข้อมูลออกมา สำหรับสถานการณ์ดังกล่าว ในบทความนี้ คุณจะได้เรียนรู้วิธีโหลดและอ่านข้อมูลจากฟอนต์ TrueType, CFF และ Type1 โดยใช้ C++
- API การจัดการแบบอักษร C ++
- โหลดฟอนต์ CFF, TrueType และ Type1 โดยใช้ C++
- แยก Font Metrics จาก TrueType หรือ Type1 Fonts โดยใช้ 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 Fonts โดยใช้ 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));
แยก Font Metrics จาก TrueType หรือ Type1 โดยใช้ C++
Aspose.Font for C++ ยังอนุญาตให้คุณแยกเมตริกแบบอักษรซึ่งมีข้อมูลเช่น Ascender, Descender, TypoAscender, TypoDescender และ UnitsPerEm ต่อไปนี้เป็นขั้นตอนในการเรียกเมตริกแบบอักษรจากแบบอักษร TrueType หรือ Type1
- สร้างวัตถุของคลาส FontDefinition เพื่อโหลดฟอนต์ TrueType หรือ Type1
- เปิดฟอนต์โดยใช้คลาส TtfFont หรือ Type1Font ตามประเภทของฟอนต์
- แยกข้อมูลเมตริกของแบบอักษร
รับ Font Metrics จาก 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 เพื่อเข้าถึงข้อมูลเกี่ยวกับฟอนต์ glyph สำหรับสัญลักษณ์ '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)));
}
}
}
แยก Font Metrics จาก 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 ได้โดยใช้ เอกสารประกอบ