Nel post precedente, hai visto come caricare e lavorare con i font CFF, TrueType, OpenType e Type1 dall’interno le tue applicazioni C++. Questo articolo fa un ulteriore passo avanti dimostrando come rilevare i simboli latini in un carattere a livello di codice usando C++. Dopo il rilevamento, puoi decidere se un font supporta o meno i simboli latini.

API C++ per rilevare i simboli latini nei caratteri

Aspose.Font for C++ è un’API di gestione e manipolazione dei caratteri che consente di rilevare facilmente il supporto dei simboli latini nei caratteri. Puoi scaricare l’API o installarla tramite NuGet.

PM> Install-Package Aspose.Font.Cpp

Rileva i simboli latini nei caratteri TrueType in C++

Rilevare il supporto dei simboli latini usando Aspose.Font per C++ è semplice come una torta. Di seguito sono riportati i passaggi per verificare se un particolare font TrueType supporta o meno i simboli latini.

  • Crea un oggetto della classe FontDefinition per caricare il font specificandone il tipo come TrueType.
  • Crea un oggetto della classe TtfFont per accedere alle informazioni del font.
  • Scorri i possibili codici e decodificali in ID glifi.
  • Abbina gli ID glifi per verificare se i simboli latini sono supportati o meno nel font TrueType di origine.

Nell’esempio di codice seguente viene illustrato come rilevare i simboli latini nei caratteri TrueType utilizzando 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";
//Nome file font con percorso completo
    
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()));
}

Rileva i simboli latini nei caratteri Type1 in C++

Il processo di rilevamento dei simboli latini nei caratteri Type1 è lo stesso che hai fatto per i caratteri TrueType. L’unica differenza è l’uso della classe Type1Font. I passaggi seguenti illustrano il processo completo di rilevamento dei simboli latini nei caratteri Type1.

  • Utilizzare la classe FontDefinition per caricare il font specificandone il tipo come Type1.
  • Usa la classe Type1Font per accedere alle informazioni del carattere.
  • Scorri i possibili codici e decodificali in ID glifi.
  • Abbina gli ID dei glifi per verificare il supporto dei simboli latini nel font Type1 fornito.

Nell’esempio di codice seguente viene illustrato come rilevare i simboli latini nel carattere Type1 usando 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";
//Nome file font con percorso completo
    
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()));
}

Conclusione

In questo articolo, hai imparato come rilevare i simboli latini nei caratteri TrueType e Type1 usando C++. Gli esempi di codice in questo articolo consentono di determinare se i simboli latini sono supportati da un carattere particolare o meno. Puoi saperne di più sull’API di manipolazione dei caratteri C++ usando documentazione.

Guarda anche