Teckensnitt är en integrerad del av digitala dokument och webbsidor som används för att definiera textens utseende. Teckensnittsfilerna används för att lagra information om typsnitten såsom stilar, vikt, storlek och etc. Det kan finnas fall då du skulle behöva manipulera typsnitt för att extrahera informationen. För sådana scenarier kommer du i den här artikeln att lära dig hur du laddar och läser information från TrueType-, CFF- och Type1-teckensnitt med C++.

C++ Font Manipulation Library

Aspose.Font for C++ är ett kraftfullt teckensnittsmanipulerings-API som låter dig arbeta med TrueType, CFF, OpenType och Type1 , EOT och många andra typsnitt från dina C++-applikationer. Du kan ladda, spara och extrahera kodningsinformation från teckensnitten samt arbeta med glyfer. API:t kan laddas ner från avsnittet downloads eller installeras via NuGet.

Ladda CFF-, TrueType- och Type1-teckensnitt med C++

Aspose.Font för C++ låter dig ladda CFF-, TrueType- och Type1-teckensnitten från filerna som finns på ditt lagringsmedium. Följande är stegen för att ladda ett teckensnitt.

  • Skapa ett objekt av klassen FontDefinition för att ladda teckensnittet genom att ange dess typ, dvs. TrueType, Type1, etc.
  • Använd klassen CffFont, TtfFont eller Type1Font för att öppna CFF-, TrueType- respektive Type1-teckensnitt från FontDefinition-objektet.

Ladda CFF-teckensnitt med C++

Följande kodexempel visar hur man laddar CFF-teckensnitt med 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";
//Typsnittsfilnamn med fullständig sökväg
    
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));

Ladda TrueType-teckensnitt med C++

Följande kodexempel visar hur man laddar TrueType-teckensnitt med 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";
//Typsnittsfilnamn med fullständig sökväg
    
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));

Ladda Type1-teckensnitt med C++

Följande kodexempel visar hur man laddar Type1-teckensnitt med 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";
//Typsnittsfilnamn med fullständig sökväg
    
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));

Extrahera teckensnittsmått från TrueType eller Type1 med C++

Aspose.Font för C++ låter dig också extrahera teckensnittsmåtten som innehåller information som Ascender, Descender, TypoAscender, TypoDescender och UnitsPerEm. Följande är stegen för att hämta teckensnittsstatistik från ett TrueType- eller Type1-teckensnitt.

  • Skapa ett objekt av klassen FontDefinition för att ladda TrueType- eller Type1-teckensnitt.
  • Öppna teckensnitt med klassen TtfFont eller Type1Font beroende på typsnittets typ.
  • Extrahera teckensnittets statistikinformation.

Få Font Metrics från TrueType Font med 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";
//Typsnittsfilnamn med fullständig sökväg
    
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);
    
//Hämta cmap unicode-kodningstabell från teckensnitt som objekt TtfCMapFormatBaseTable för att få tillgång till information om teckensnittsglyph för symbol 'A'.
//Kontrollera också att typsnittet har objektet TtfGlyfTable (tabell 'glyf') för att komma åt 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());
    
    //Kod för 'A'-symbol
    char16_t unicode = (char16_t)65;
    
    //Glyfindex för 'A'
    uint32_t glIndex = cmapTable->GetGlyphIndex(unicode);
    
    if (glIndex != static_cast<uint32_t>(0))
    {
        //Glyf för 'A'
        System::SharedPtr<Glyph> glyph = font->GetGlyphById(glIndex);
        if (glyph != nullptr)
        {
            //Skriv ut glyfstatistik
            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)));
        }
    }
}

Extrahera Font Metrics från Type1 Font med 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";
//Typsnittsfilnamn med fullständig sökväg
    
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);

Slutsats

I den här artikeln har du lärt dig hur du laddar CFF-, TrueType- och Type1-teckensnitt och extraherar deras information med C++. Du kan utforska mer om C++ Font Manipulation API med hjälp av dokumentationen.