Písma jsou nedílnou součástí digitálních dokumentů a webových stránek, které se používají k definování vzhledu textu. Soubory písem se používají k ukládání informací o písmech, jako jsou styly, váha, velikost atd. Může nastat situace, kdy budete muset s písmy manipulovat, abyste z nich získali informace. Pro takové scénáře se v tomto článku dozvíte, jak načíst a číst informace z písem TrueType, CFF a Type1 pomocí C++.

Knihovna manipulace s písmy C++

Aspose.Font for C++ je výkonné API pro manipulaci s písmy, které vám umožňuje pracovat s TrueType, CFF, OpenType a Type1 , EOT a mnoho dalších písem z vašich aplikací C++. Můžete načíst, uložit a extrahovat informace o kódování z písem a také pracovat s glyfy. API lze stáhnout ze sekce ke stažení nebo nainstalovat přes NuGet.

Načtěte písma CFF, TrueType a Type1 pomocí C++

Aspose.Font for C++ vám umožňuje načíst písma CFF, TrueType a Type1 ze souborů umístěných na vašem paměťovém médiu. Následují kroky k načtení písma.

  • Vytvořte objekt třídy FontDefinition pro načtení písma zadáním jeho typu, tj. TrueType, Type1 atd.
  • K otevření písem CFF, TrueType a Type1 z objektu FontDefinition použijte třídu CffFont, TtfFont nebo Type1Font.

Načtěte písma CFF pomocí C++

Následující ukázka kódu ukazuje, jak načíst písma CFF pomocí 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";
//Název souboru písma s úplnou cestou
    
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));

Načtěte písma TrueType pomocí C++

Následující ukázka kódu ukazuje, jak načíst písma TrueType pomocí 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";
//Název souboru písma s úplnou cestou
    
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));

Načtěte písma Type1 pomocí C++

Následující ukázka kódu ukazuje, jak načíst písma Type1 pomocí 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";
//Název souboru písma s úplnou cestou
    
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));

Extrahujte metriky písem z TrueType nebo Type1 pomocí C++

Aspose.Font for C++ vám také umožňuje extrahovat metriky písem, které obsahují informace jako Ascender, Descender, TypoAscender, TypoDescender a UnitsPerEm. Následují kroky k načtení metrik písem z písem TrueType nebo Type1.

  • Vytvořte objekt třídy FontDefinition pro načtení písem TrueType nebo Type1.
  • Otevřete písmo pomocí třídy TtfFont nebo Type1Font podle typu písma.
  • Extrahujte informace o metrikách písma.

Získejte metriky písem z písma TrueType pomocí 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";
//Název souboru písma s úplnou cestou
    
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);
    
//Získejte tabulku kódování Cmap unicode z písma jako objekt TtfCMapFormatBaseTable pro přístup k informacím o glyfu písma pro symbol 'A'.
//Také zkontrolujte, zda má písmo objekt TtfGlyfTable (tabulka 'glyf') pro přístup ke glyfu.
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());
    
    //Kód pro symbol 'A'
    char16_t unicode = (char16_t)65;
    
    //Index glyfů pro „A“
    uint32_t glIndex = cmapTable->GetGlyphIndex(unicode);
    
    if (glIndex != static_cast<uint32_t>(0))
    {
        //Glyf pro „A“
        System::SharedPtr<Glyph> glyph = font->GetGlyphById(glIndex);
        if (glyph != nullptr)
        {
            //Vytisknout metriky glyfů
            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)));
        }
    }
}

Extrahujte metriky písem z písma Type1 pomocí 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";
//Název souboru písma s úplnou cestou
    
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);

Závěr

V tomto článku jste se naučili, jak načíst písma CFF, TrueType a Type1 a extrahovat jejich informace pomocí C++. Další informace o rozhraní API pro manipulaci s písmy C++ můžete prozkoumat pomocí dokumentace.