Đọc thông tin phông chữ
Khám phá số liệu phông chữ với Aspose.Font API Solution cho C++. Tìm hiểu các chi tiết sâu sắc về mỗi nét, đường cong và sắc thái. Giải pháp của chúng tôi cho phép bạn làm việc với glyph một cách dễ dàng, giúp bạn trích xuất thông tin về các đặc điểm độc đáo của bất kỳ phông chữ nào.
Hãy khám phá thế giới các khả năng về phông chữ với Aspose.Font API Solution cho C++ cung cấp cho bạn một bộ công cụ mạnh mẽ, bao gồm chuyển đổi phông chữ, thao tác glyph, phát hiện ký hiệu Latin và nhiều hơn nữa. API của chúng tôi còn cho phép bạn làm việc với glyph và lấy thông tin về các glyph có trong một phông chữ. Nâng cao thiết kế của bạn, tăng tốc dự án, và khai thác tối đa tiềm năng của glyph với Aspose.Font cho C++. Đừng chần chừ, hãy nhận bản dùng thử miễn phí!
Glyph là một thiết kế độc đáo cho một ký tự hoặc biểu tượng trong một phông chữ. Để hiểu rõ hơn về đơn vị font này, hãy đọc bài viết Introduction to Glyph . Số liệu phông chữ là các phép đo và thông số dùng để mô tả diện mạo trực quan của một phông chữ. Những số liệu này có thể bao gồm thông tin như chiều cao ký tự, chiều rộng ký tự, khoảng cách giữa các ký tự, và vị trí của đường cơ bản, trong số những yếu tố khác. Chúng cho phép các nhà thiết kế và lập trình viên dự đoán chính xác cách bố trí văn bản trong tài liệu điện tử và giao diện người dùng.
Trang này giải thích cách lấy các số liệu phông chữ khác nhau như số lượng glyph, chiều cao chữ, chiều rộng của glyph ‘A’, v.v. Tuy nhiên, chức năng đầy đủ về làm việc với glyph được mô tả chi tiết trong bài viết Sử dụng đối tượng Glyph. Ví dụ mã bao gồm một phần về việc lấy siêu dữ liệu phông chữ, bao gồm tên phông chữ. Loại chức năng này có thể được tích hợp vào các ứng dụng web, chẳng hạn như ứng dụng Font Metadata có sẵn trong hệ sinh thái Aspose. Nếu bạn muốn học các ví dụ hoàn chỉnh và tệp dữ liệu, hãy truy cập Aspose Github Project .
Để nhận được số liệu phông chữ, chúng ta cần:
Aspose.Font for C++ API, một API giàu tính năng, mạnh mẽ và dễ sử dụng cho việc thao tác và chuyển đổi tài liệu.
Mở Trình quản lý gói NuGet, tìm kiếm Aspose.Font và cài đặt. Bạn cũng có thể sử dụng lệnh sau từ Package Manager Console.
Package Manager Console Command
PM> Install-Package Aspose.Font
Các bước để lấy số liệu phông chữ bằng C++:
- Trích xuất thông tin về một phông chữ bằng cách tạo một thể hiện của lớp TtfFont .
- In ra tên phông chữ sử dụng thuộc tính FontName.
- In ra số lượng glyph trong phông chữ bằng thuộc tính NumGlyphs. Các số liệu phông chữ, chẳng hạn như ascender, descender, typo ascender, typo descender, và UnitsPerEm cũng được in ra.
- Mã sau đó lấy bảng mã Unicode
cmaptừ phông chữ, bảng này được dùng để ánh xạ mã ký tự sang chỉ số glyph. Nó kiểm tra xem phông chữ có cả bảngcmapvà bảngglyfhay không, bảngglyfđược dùng để truy cập các glyph. Nếu cả hai bảng tồn tại, nó sẽ lấy chỉ sốglyfcho ký tựAvà sau đó lấy glyph cho ký hiệuA. - In ra hộp bao (
bounding box) của glyphAvà chiều rộng của nó.
Mã C++ để lấy thông tin về các glyph của phông chữ
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)));
}
}
}