글리프 및 지표 정보 읽기

문자열 너비를 계산하고, 글리프 좌표를 계산하고, 글리프를 사용한 기타 조작을 위한 C++ API 솔루션입니다.

 

Aspose.Font API는 변환, 글리프 조작, 라틴 기호 감지 등 포괄적인 글꼴 관련 기능을 제공합니다. 이러한 기능 중 일부는 서체의 개별 문자 또는 기호/문자의 그래픽 표현인 글리프 조작과 관련이 있습니다. 이러한 글꼴 단위에 대한 자세한 내용은 Glyph 소개 문서를 참조하세요.

이 페이지에서는 Glyph 및 Metrics 정보를 읽는 옵션에 대해 설명하지만 기능을 완전히 이해하려면 Using Glyph Objects . 여기에서 수많은 C++ 코드 예제를 찾고 글리프 및 글리프 개체 작업을 위한 Aspose.Font 기능에 대해 알아봅니다. 글리프 조작을 위한 Aspose.Font 사용을 보여주는 더 많은 코드 예제는 Aspose Github 프로젝트 에서 찾을 수 있습니다.

여기에 사용된 용어인 글리프 메트릭은 글꼴의 특정 글리프에 대한 정보 및 측정을 나타냅니다. 여기에는 글꼴에서 문자의 적절한 위치 지정 및 간격에 중요한 글리프의 높이, 너비, 사전 너비 및 기타 치수와 같은 정보가 포함될 수 있습니다. 이러한 메트릭은 텍스트 레이아웃 및 렌더링 시스템에서 일관되고 정확한 텍스트 표시를 위해 사용됩니다.

글리프로 작업하려면 다음이 필요합니다.

  • Aspose.Font for C++ API는 기능이 풍부하고 강력하며 사용하기 쉬운 문서 조작 및 변환 API입니다.

  • NuGet 패키지 관리자를 열고 Aspose.Font를 검색하여 설치합니다. 패키지 관리자 콘솔에서 다음 명령을 사용할 수도 있습니다.

Package Manager Console Command


    PM> Install-Package Aspose.Font

C++를 사용하여 문자열 너비를 계산하는 단계:

글리프를 사용하여 문자열의 너비를 계산하려면 먼저 문자열에서 개별 글리프의 너비를 결정한 다음 해당 너비를 합산하여 총 숫자를 구해야 합니다. 단계별로 설명하면 순서는 다음과 같습니다.

  1. 문자열 너비를 계산하는 데 사용할 글꼴과 크기를 결정합니다.
  2. 문자열의 각 문자에 대해 글꼴의 해당 글리프를 결정합니다. 해당 글리프의 인덱스를 제공하는 문자표를 사용하십시오.
  3. 글리프 인덱스를 사용하여 글꼴의 메트릭 테이블에서 글리프에 대한 메트릭을 찾습니다. 글리프의 메트릭에는 일반적으로 너비, 높이 및 고급 너비가 포함됩니다.
  4. 문자열에 있는 모든 글리프의 고급 너비를 더하여 문자열의 총 너비를 구합니다. 커닝 정보에 주의하십시오.

C++ 코드로 유사한 프로세스를 설명하면 다음과 같이 보일 것입니다.

문자열 너비를 찾는 C++ 코드

    using System;
    using System::IO;
    using System::Drawing;
    using System::Collections::Generic;
    using Aspose::Font::Sources;
    using Aspose::Font::Glyphs;
    using Aspose::Font::RenderingPath;
        //Declare the text and other constants
        const System::String text = u"Hello world";
        const int32_t fontSize = 10;
    
        //Declare the variable for string width
        double width = 0;
    
        //Get glyph for each letter in text and calculate width for whole text.
        //The same result can be achieved using method font.Metrics.MeasureString(text, fontSize).
        for (char16_t symbol : text)
        {
            System::SharedPtr<GlyphId> gid = this->_font->get_Encoding()->DecodeToGid(symbol);
            System::SharedPtr<Glyph> glyph = this->_font->GetGlyphById(gid);
            width += (glyph->get_WidthVectorX() / this->_font->get_Metrics()->get_UnitsPerEM()) * fontSize;
        }
	    font->get_Metrics()->MeasureString(text, width);

        //Print the output results
        System::Console::WriteLine(System::String::Format(u"Width for text \"{0}\" with font size {2} is equal {3}.", text, FontName, fontSize, width));

C++를 사용하여 좌표가 있는 모든 글리프 포인트를 계산하는 단계:

  1. System::Drawing::Point 유형의 points 목록을 선언합니다. 이 목록은 a의 포인트를 저장합니다. 글리프 경로 세그먼트..
  2. IPathSegment 인터페이스에 Init 서비스 참조를 지정합니다.
  3. 모든 글리프 경로 세그먼트를 반복하고 포인트를 합산합니다.

글리프 포인트를 찾기 위한 C++ 코드

    //Declare the resultant list with points
    System::SharedPtr<System::Collections::Generic::List<System::Drawing::Point>> points =
    System::MakeObject<System::Collections::Generic::List<System::Drawing::Point>>();
    
    //Init the service reference on IPathSegment
    System::SharedPtr<IPathSegment> prevSegment;
    
    //Iterate all the glyph path segments and collect points
    for (auto&& segment : glyph->get_Path()->get_Segments())
    {
        if ((System::ObjectExt::Is<LineTo>(segment)) || (System::ObjectExt::Is<CurveTo>(segment)))
        {
            if (System::ObjectExt::Is<MoveTo>(prevSegment))
            {
                System::SharedPtr<MoveTo> moveTo = System::DynamicCast_noexcept<Aspose::Font::RenderingPath::MoveTo>(prevSegment);
                AddPoint((int32_t)moveTo->get_X(), (int32_t)moveTo->get_Y(), points);
            }
            if (System::ObjectExt::Is<LineTo>(segment))
            {
                System::SharedPtr<LineTo> line = System::DynamicCast_noexcept<Aspose::Font::RenderingPath::LineTo>(segment);
                AddPoint((int32_t)line->get_X(), (int32_t)line->get_Y(), points);
            }
            else if (System::ObjectExt::Is<CurveTo>(segment))
            {
                System::SharedPtr<CurveTo> curve = System::DynamicCast_noexcept<Aspose::Font::RenderingPath::CurveTo>(segment);
                AddPoint((int32_t)curve->get_X1(), (int32_t)curve->get_Y1(), points);
                AddPoint((int32_t)curve->get_X2(), (int32_t)curve->get_Y2(), points);
                AddPoint((int32_t)curve->get_X3(), (int32_t)curve->get_Y3(), points);
            }
        }
        prevSegment = segment;
    }



자주하는 질문

1. 글리프 메트릭이란 무엇입니까?

글리프 메트릭 은 텍스트 레이아웃이 생성될 때 글리프가 배치되는 방식에 영향을 미치는 매개변수입니다.

2. 글리프 메트릭이란 무엇입니까?

가장 많이 사용되는 글리프 메트릭은 고급 너비, 원점, 측면 베어링, 기준선, 어센트, 어센더, 디센트, 디센더, 바운딩 박스, 높이, 너비 및 커닝입니다.

3. 이 API 솔루션으로 글리프를 관리하는 방법은 무엇입니까?

C#에서 글리프를 코딩하려면 Aspose.Font.Glyphs 네임스페이스의 엔터티를 사용하세요.

4. 글리프 측정항목의 중요성은 무엇입니까?

글리프 측정법을 이해하고 적절하게 조정함으로써 타이포그래퍼와 디자이너는 인쇄 자료, 디지털 인터페이스 또는 웹 페이지에서 텍스트의 최적 간격, 정렬 및 가독성을 보장할 수 있습니다.