I Fonts sono parte integrante dei documenti digitali e delle pagine Web utilizzati per definire l’aspetto del testo. I file dei caratteri vengono utilizzati per memorizzare informazioni sui caratteri come stili, peso, dimensioni e così via. Potrebbe verificarsi il caso in cui sarebbe necessario manipolare i caratteri per estrarne le informazioni. Per tali scenari, in questo articolo imparerai come caricare e leggere le informazioni dai caratteri TrueType, CFF e Type1 usando C++.
- API di manipolazione dei caratteri C++
- Carica i caratteri CFF, TrueType e Type1 usando C++
- Estrai le metriche dei caratteri dai caratteri TrueType o Type1 utilizzando C++
Libreria di manipolazione dei caratteri C++
Aspose.Font for C++ è una potente API di manipolazione dei caratteri che ti consente di lavorare con TrueType, CFF, OpenType e Type1 , EOT e molti altri caratteri dalle tue applicazioni C++. Puoi caricare, salvare ed estrarre informazioni di codifica dai caratteri e lavorare con i glifi. L’API può essere scaricata dalla sezione download o installata tramite NuGet.
Carica i caratteri CFF, TrueType e Type1 usando C++
Aspose.Font per C++ consente di caricare i caratteri CFF, TrueType e Type1 dai file che si trovano sul supporto di archiviazione. Di seguito sono riportati i passaggi per caricare un font.
- Crea un oggetto della classe FontDefinition per caricare il font specificandone il tipo, ad esempio TrueType, Type1, ecc.
- Utilizzare la classe CffFont, TtfFont o Type1Font per aprire rispettivamente i caratteri CFF, TrueType e Type1 dall’oggetto FontDefinition.
Carica i caratteri CFF usando C++
Nell’esempio di codice seguente viene illustrato come caricare i caratteri CFF 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"OpenSans-Regular.cff";
//Nome file font con percorso completo
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));
Carica i caratteri TrueType usando C++
Nell’esempio di codice seguente viene illustrato come caricare i 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));
Carica i caratteri Type1 usando C++
Nell’esempio di codice seguente viene illustrato come caricare i caratteri Type1 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"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));
Estrai le metriche dei caratteri da TrueType o Type1 usando C++
Aspose.Font per C++ consente anche di estrarre le metriche dei caratteri che contengono informazioni come Ascender, Descender, TypoAscender, TypoDescender e UnitsPerEm. Di seguito sono riportati i passaggi per recuperare le metriche dei caratteri da un carattere TrueType o Type1.
- Crea un oggetto della classe FontDefinition per caricare il font TrueType o Type1.
- Apri il font usando la classe TtfFont o Type1Font in base al tipo di font.
- Estrarre le informazioni sulle metriche del carattere.
Ottieni le metriche dei caratteri da TrueType Font 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"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> 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);
//Ottieni la tabella di codifica cmap unicode dal font come oggetto TtfCMapFormatBaseTable per accedere alle informazioni sul glifo del font per il simbolo 'A'.
//Verifica anche che il carattere abbia l'oggetto TtfGlyfTable (tabella 'glyf') per accedere al glifo.
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());
//Codice per il simbolo 'A'
char16_t unicode = (char16_t)65;
//Indice glifo per 'A'
uint32_t glIndex = cmapTable->GetGlyphIndex(unicode);
if (glIndex != static_cast<uint32_t>(0))
{
//Glifo per 'A'
System::SharedPtr<Glyph> glyph = font->GetGlyphById(glIndex);
if (glyph != nullptr)
{
//Stampa le metriche dei glifi
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)));
}
}
}
Estrai le metriche dei caratteri dal 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));
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);
Conclusione
In questo articolo hai imparato come caricare i caratteri CFF, TrueType e Type1 ed estrarne le informazioni usando C++. Puoi esplorare di più sull’API di manipolazione dei caratteri C++ utilizzando la documentazione.