글리프 및 지표 정보 읽기
문자열 너비를 계산하고, 글리프 좌표를 계산하고, 글리프를 사용한 기타 조작을 위한 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++를 사용하여 문자열 너비를 계산하는 단계:
글리프를 사용하여 문자열의 너비를 계산하려면 먼저 문자열에서 개별 글리프의 너비를 결정한 다음 해당 너비를 합산하여 총 숫자를 구해야 합니다. 단계별로 설명하면 순서는 다음과 같습니다.
- 문자열 너비를 계산하는 데 사용할 글꼴과 크기를 결정합니다.
- 문자열의 각 문자에 대해 글꼴의 해당 글리프를 결정합니다. 해당 글리프의 인덱스를 제공하는 문자표를 사용하십시오.
- 글리프 인덱스를 사용하여 글꼴의 메트릭 테이블에서 글리프에 대한 메트릭을 찾습니다. 글리프의 메트릭에는 일반적으로 너비, 높이 및 고급 너비가 포함됩니다.
- 문자열에 있는 모든 글리프의 고급 너비를 더하여 문자열의 총 너비를 구합니다. 커닝 정보에 주의하십시오.
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++를 사용하여 좌표가 있는 모든 글리프 포인트를 계산하는 단계:
- System::Drawing::Point 유형의 points 목록을 선언합니다. 이 목록은 a의 포인트를 저장합니다. 글리프 경로 세그먼트..
- IPathSegment 인터페이스에 Init 서비스 참조를 지정합니다.
- 모든 글리프 경로 세그먼트를 반복하고 포인트를 합산합니다.
글리프 포인트를 찾기 위한 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. 글리프 측정항목의 중요성은 무엇입니까?
글리프 측정법을 이해하고 적절하게 조정함으로써 타이포그래퍼와 디자이너는 인쇄 자료, 디지털 인터페이스 또는 웹 페이지에서 텍스트의 최적 간격, 정렬 및 가독성을 보장할 수 있습니다.