글꼴은 텍스트의 모양을 정의하는 데 사용되는 디지털 문서 및 웹 페이지의 필수적인 부분입니다. 글꼴 파일은 스타일, 두께, 크기 등과 같은 글꼴에 대한 정보를 저장하는 데 사용됩니다. 정보를 추출하기 위해 글꼴을 조작해야 하는 경우가 있을 수 있습니다. 이러한 시나리오의 경우 이 기사에서는 C++를 사용하여 TrueType, CFF 및 Type1 글꼴에서 정보를 로드하고 읽는 방법을 배웁니다.

C++ 글꼴 조작 라이브러리

Aspose.Font for C++TrueType, CFF, OpenTypeType1으로 작업할 수 있는 강력한 글꼴 조작 API입니다. , EOT 및 많은 기타 글꼴을 C++ 애플리케이션 내에서 사용할 수 있습니다. 글꼴에서 인코딩 정보를 로드, 저장 및 추출하고 글리프로 작업할 수 있습니다. API는 다운로드 섹션에서 다운로드하거나 NuGet을 통해 설치할 수 있습니다.

C++를 사용하여 CFF, TrueType 및 Type1 글꼴 로드

Aspose.Font for C++를 사용하면 저장 매체에 있는 파일에서 CFF, TrueType 및 Type1 글꼴을 로드할 수 있습니다. 다음은 글꼴을 로드하는 단계입니다.

  • FontDefinition 클래스의 객체를 생성하여 해당 유형(예: TrueType, Type1 등)을 지정하여 글꼴을 로드합니다.
  • CffFont, TtfFont 또는 Type1Font 클래스를 사용하여 FontDefinition 개체에서 각각 CFF, TrueType 및 Type1 글꼴을 엽니다.

C++를 사용하여 CFF 글꼴 로드

다음 코드 샘플은 C++를 사용하여 CFF 글꼴을 로드하는 방법을 보여줍니다.

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";
//전체 경로가 있는 글꼴 파일 이름
    
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));

C++를 사용하여 트루타입 글꼴 로드

다음 코드 샘플은 C++를 사용하여 TrueType 글꼴을 로드하는 방법을 보여줍니다.

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";
//전체 경로가 있는 글꼴 파일 이름
    
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));

C++를 사용하여 Type1 글꼴 로드

다음 코드 샘플은 C++를 사용하여 Type1 글꼴을 로드하는 방법을 보여줍니다.

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";
//전체 경로가 있는 글꼴 파일 이름
    
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));

C++를 사용하여 TrueType 또는 Type1에서 글꼴 메트릭 추출

C++용 Aspose.Font를 사용하면 Ascender, Descender, TypoAscender, TypoDescender 및 UnitsPerEm과 같은 정보가 포함된 글꼴 메트릭을 추출할 수도 있습니다. 다음은 TrueType 또는 Type1 글꼴에서 글꼴 메트릭을 검색하는 단계입니다.

  • TrueType 또는 Type1 글꼴을 로드할 FontDefinition 클래스의 개체를 만듭니다.
  • 글꼴의 종류에 따라 TtfFont 또는 Type1Font 클래스를 사용하여 글꼴을 엽니다.
  • 글꼴의 메트릭 정보를 추출합니다.

C++를 사용하여 TrueType 글꼴에서 글꼴 메트릭 가져오기

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";
//전체 경로가 있는 글꼴 파일 이름
    
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);
    
//글꼴에서 개체 TtfCMapFormatBaseTable로 cmap 유니코드 인코딩 테이블을 가져와 기호 'A'의 글꼴 글리프에 대한 정보에 액세스합니다.
//또한 글꼴에 글리프에 액세스하기 위한 개체 TtfGlyfTable(테이블 'glyf')이 있는지 확인합니다.
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());
    
    //'A' 기호에 대한 코드
    char16_t unicode = (char16_t)65;
    
    //'A'에 대한 글리프 인덱스
    uint32_t glIndex = cmapTable->GetGlyphIndex(unicode);
    
    if (glIndex != static_cast<uint32_t>(0))
    {
        //'A'에 대한 글리프
        System::SharedPtr<Glyph> glyph = font->GetGlyphById(glIndex);
        if (glyph != nullptr)
        {
            //글리프 메트릭 인쇄
            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)));
        }
    }
}

C++를 사용하여 Type1 글꼴에서 글꼴 메트릭 추출

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";
//전체 경로가 있는 글꼴 파일 이름
    
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);

결론

이 기사에서는 CFF, TrueType 및 Type1 글꼴을 로드하고 C++를 사용하여 해당 정보를 추출하는 방법을 배웠습니다. 문서를 사용하여 C++ 글꼴 조작 API에 대해 자세히 알아볼 수 있습니다.