Czcionki są integralną częścią dokumentów cyfrowych i stron internetowych, które służą do definiowania wyglądu tekstu. Pliki czcionek służą do przechowywania informacji o czcionkach, takich jak style, grubość, rozmiar itp. Może się zdarzyć, że będziesz musiał manipulować czcionkami w celu wyodrębnienia ich informacji. W przypadku takich scenariuszy w tym artykule dowiesz się, jak ładować i odczytywać informacje z czcionek TrueType, CFF i Type1 przy użyciu języka C++.

Biblioteka manipulacji czcionkami C++

Aspose.Font for C++ to potężny interfejs API do manipulacji czcionkami, który umożliwia pracę z TrueType, CFF, OpenType i Type1 , EOT i wiele innych czcionek z aplikacji C++. Możesz ładować, zapisywać i wyodrębniać informacje o kodowaniu z czcionek, a także pracować z glifami. API można pobrać z sekcji downloads lub zainstalować poprzez NuGet.

Załaduj czcionki CFF, TrueType i Type1 przy użyciu języka C++

Aspose.Font for C++ umożliwia ładowanie czcionek CFF, TrueType i Type1 z plików znajdujących się na nośnikach pamięci. Poniżej przedstawiono kroki ładowania czcionki.

  • Utwórz obiekt klasy FontDefinition, aby załadować czcionkę, określając jej typ, tj. TrueType, Type1 itp.
  • Użyj klasy CffFont, TtfFont lub Type1Font, aby otworzyć odpowiednio czcionki CFF, TrueType i Type1 z obiektu FontDefinition.

Załaduj czcionki CFF przy użyciu C++

Poniższy przykładowy kod pokazuje, jak ładować czcionki CFF przy użyciu języka 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";
//Nazwa pliku czcionki z pełną ścieżką
    
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));

Załaduj czcionki TrueType za pomocą C++

Poniższy przykładowy kod pokazuje, jak ładować czcionki TrueType przy użyciu języka 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";
//Nazwa pliku czcionki z pełną ścieżką
    
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));

Załaduj czcionki Type1 za pomocą C++

Poniższy przykładowy kod pokazuje, jak ładować czcionki Type1 przy użyciu języka 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";
//Nazwa pliku czcionki z pełną ścieżką
    
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));

Wyodrębnij metryki czcionek z TrueType lub Type1 przy użyciu C++

Aspose.Font for C++ pozwala również wyodrębnić metryki czcionek, które zawierają informacje, takie jak Ascender, Descender, TypoAscender, TypoDescender i UnitsPerEm. Poniżej przedstawiono kroki pobierania metryk czcionek z czcionek TrueType lub Type1.

  • Utwórz obiekt klasy FontDefinition, aby załadować czcionkę TrueType lub Type1.
  • Otwórz czcionkę przy użyciu klasy TtfFont lub Type1Font zgodnie z typem czcionki.
  • Wyodrębnij informacje o metrykach czcionki.

Uzyskaj metryki czcionek z czcionek TrueType przy użyciu języka 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";
//Nazwa pliku czcionki z pełną ścieżką
    
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);
    
//Uzyskaj tabelę kodowania Unicode cmap z czcionki jako obiekt TtfCMapFormatBaseTable, aby uzyskać dostęp do informacji o glifie czcionki dla symbolu „A”.
//Sprawdź również, czy czcionka ma obiekt TtfGlyfTable (tabela „glyf”), aby uzyskać dostęp do glifu.
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 dla symbolu „A”.
    char16_t unicode = (char16_t)65;
    
    //Indeks glifów dla „A”
    uint32_t glIndex = cmapTable->GetGlyphIndex(unicode);
    
    if (glIndex != static_cast<uint32_t>(0))
    {
        //Glif dla „A”
        System::SharedPtr<Glyph> glyph = font->GetGlyphById(glIndex);
        if (glyph != nullptr)
        {
            //Wydrukuj metryki glifów
            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)));
        }
    }
}

Wyodrębnij metryki czcionek z czcionki Type1 za 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";
//Nazwa pliku czcionki z pełną ścieżką
    
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);

Wniosek

W tym artykule nauczyłeś się ładować czcionki CFF, TrueType i Type1 oraz wyodrębniać ich informacje za pomocą C++. Możesz dowiedzieć się więcej o C++ Font Manipulation API, korzystając z dokumentacji.