Trong bài trước, bạn đã biết cách tải và làm việc với các phông chữ CFF, TrueType, OpenTypeType1 từ bên trong các ứng dụng C++ của bạn. Bài viết này sẽ đưa bạn thêm một bước nữa bằng cách trình bày cách phát hiện các ký hiệu Latinh trong một phông chữ bằng cách lập trình bằng C++. Sau khi phát hiện, bạn có thể quyết định phông chữ có hỗ trợ các ký hiệu Latinh hay không.

API C++ để phát hiện các ký hiệu Latinh trong phông chữ

Aspose.Font for C++ là API quản lý và thao tác phông chữ cho phép bạn phát hiện sự hỗ trợ của các ký hiệu Latinh trong phông chữ khá dễ dàng. Bạn có thể tải xuống API hoặc cài đặt qua NuGet.

PM> Install-Package Aspose.Font.Cpp

Phát hiện các ký hiệu Latinh trong phông chữ TrueType trong C++

Phát hiện sự hỗ trợ của các ký hiệu Latinh bằng cách sử dụng Aspose.Font cho C++ đơn giản như một chiếc bánh. Sau đây là các bước để kiểm tra xem một phông chữ TrueType cụ thể có hỗ trợ các ký hiệu Latinh hay không.

  • Tạo một đối tượng thuộc lớp FontDefinition để tải phông chữ bằng cách chỉ định loại phông chữ là TrueType.
  • Tạo một đối tượng thuộc lớp TtfFont để truy cập thông tin của phông chữ.
  • Lặp lại các mã có thể và giải mã chúng thành ID hình tượng.
  • Ghép các ID hình tượng để kiểm tra xem các ký hiệu Latinh có được hỗ trợ trong phông chữ TrueType nguồn hay không.

Mẫu mã sau đây cho biết cách phát hiện các ký hiệu Latinh trong phông chữ TrueType bằng 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";
//Tên tệp phông chữ với đường dẫn đầy đủ
    
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));
    
bool latinText = true;
    
    
for (uint32_t code = 65; code < static_cast<uint32_t>(123); code++)
{
    System::SharedPtr<GlyphId> gid = ttfFont->get_Encoding()->DecodeToGid(code);
    if (gid == nullptr || gid == System::StaticCast<System::Object>(GlyphUInt32Id::get_NotDefId()))
    {
        latinText = false;
    }
}
    
if (latinText)
{
    System::Console::WriteLine(System::String::Format(u"Font {0} supports latin symbols.", ttfFont->get_FontName()));
}
else
{
    System::Console::WriteLine(System::String::Format(u"Latin symbols are not supported by font {0}.", ttfFont->get_FontName()));
}

Phát hiện các ký hiệu Latinh trong phông chữ Type1 trong C++

Quá trình phát hiện các ký hiệu Latinh trong phông chữ Type1 giống như bạn đã thực hiện đối với phông chữ TrueType. Sự khác biệt duy nhất là việc sử dụng lớp Type1Font. Các bước sau đây trình bày toàn bộ quy trình phát hiện ký hiệu Latinh trong phông chữ Type1.

  • Sử dụng lớp FontDefinition để tải phông chữ bằng cách chỉ định loại phông chữ là Type1.
  • Sử dụng lớp Type1Font để truy cập thông tin của phông chữ.
  • Lặp lại các mã có thể và giải mã chúng thành ID hình tượng.
  • So khớp các ID hình tượng để kiểm tra sự hỗ trợ của các ký hiệu Latinh trong phông chữ Type1 được cung cấp.

Mẫu mã sau đây cho biết cách phát hiện các ký hiệu Latinh trong phông chữ Type1 bằng 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";
//Tên tệp phông chữ với đường dẫn đầy đủ
    
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));
    
bool latinText = true;
    
    
for (uint32_t code = 65; code < static_cast<uint32_t>(123); code++)
{
    System::SharedPtr<GlyphId> gid = font->get_Encoding()->DecodeToGid(code);
    if (gid == nullptr || gid == System::StaticCast<System::Object>(GlyphUInt32Id::get_NotDefId()))
    {
        latinText = false;
    }
}
    
if (latinText)
{
    System::Console::WriteLine(System::String::Format(u"Font {0} supports latin symbols.", font->get_FontName()));
}
else
{
    System::Console::WriteLine(System::String::Format(u"Latin symbols are not supported by font {0}.", font->get_FontName()));
}

Sự kết luận

Trong bài viết này, bạn đã học cách phát hiện các ký hiệu Latinh trong phông chữ TrueType và Type1 bằng C++. Các mẫu mã trong bài viết này cho phép bạn xác định xem các ký hiệu Latinh có được hỗ trợ bởi một phông chữ cụ thể hay không. Bạn có thể tìm hiểu thêm về API thao tác phông chữ C++ bằng cách sử dụng tài liệu.

Xem thêm