อ่าน Glyphs และ Metrics information
โซลูชัน API C++ เพื่อคำนวณความกว้างของสตริง, คำนวณพิกัด glyph, และการจัดการอื่น ๆ กับ glyphs.
Aspose.Font API ให้ชุดฟังก์ชันที่ครอบคลุมเกี่ยวกับแบบอักษร รวมถึงการแปลง, การจัดการ glyphs, การตรวจจับสัญลักษณ์ละติน, และอื่น ๆ คุณลักษณะบางส่วนเกี่ยวกับการจัดการ glyphs ซึ่งเป็นอักขระแต่ละตัวของแบบอักษรหรือการแทนกราฟิกของสัญลักษณ์/อักขระ เพื่อเข้าใจเพิ่มเติมเกี่ยวกับหน่วยเหล่านี้ของแบบอักษร โปรดดูบทความ Introduction to Glyph .
หน้านี้สรุปตัวเลือกสำหรับการอ่านข้อมูล Glyph และ Metrics แต่เพื่อเข้าใจการทำงานอย่างเต็มที่ โปรดดูบทความ Using Glyph Objects . ที่นี่คุณจะพบตัวอย่างโค้ด C++ จำนวนมากและเรียนรู้ความสามารถของ Aspose.Font ในการทำงานกับ glyphs และ Glyph objects ตัวอย่างโค้ดเพิ่มเติมที่แสดงการใช้ Aspose.Font สำหรับการจัดการ Glyphs สามารถพบได้ใน Github Project ของ Aspose.
Glyph metrics ซึ่งเป็นคำที่ใช้ที่นี่ หมายถึงข้อมูลและการวัดของ glyph เฉพาะในแบบอักษร ซึ่งอาจรวมถึงข้อมูลเช่น ความสูง, ความกว้าง, ความกว้างที่ก้าวหน้า (advance width) และมิติอื่น ๆ ของ glyph ที่สำคัญต่อการวางตำแหน่งและการเว้นระยะของอักขระในแบบอักษร มาตรฐานเหล่านี้ถูกใช้โดยระบบจัดเรียงข้อความและการแสดงผลเพื่อให้แน่ใจว่าการแสดงผลข้อความเป็นไปอย่างสม่ำเสมอและแม่นยำ.
เพื่อทำงานกับ glyphs เราต้องการ:
Aspose.Font for C++ API ซึ่งเป็น API ที่เต็มไปด้วยฟีเจอร์, มีประสิทธิภาพและใช้งานง่ายสำหรับการจัดการและแปลงเอกสาร.
เปิด NuGet package manager, ค้นหา Aspose.Font แล้วติดตั้ง คุณยังสามารถใช้คำสั่งต่อไปนี้จาก Package Manager Console.
Package Manager Console Command
PM> Install-Package Aspose.Font
ขั้นตอนการคำนวณความกว้างของสตริงโดยใช้ C++:
เพื่อคำนวณความกว้างของสตริงโดยใช้ glyphs คุณต้องกำหนดความกว้างของแต่ละ glyph ก่อน แล้วรวมความกว้างเหล่านั้นเพื่อหาค่ารวม หากอธิบายขั้นตอนแล้วลำดับจะเป็นดังนี้:
- กำหนดแบบอักษรและขนาดที่ต้องการใช้เพื่อคำนวณความกว้างของสตริง.
- สำหรับแต่ละอักขระในสตริง ให้กำหนด glyph ที่สอดคล้องในแบบอักษร ใช้ character map เพื่อรับดัชนีของ glyph นั้น.
- โดยใช้ดัชนี glyph, ค้นหาข้อมูล metrics ของ glyph ในตาราง metrics ของแบบอักษร Metrics ของ glyph ปกติจะรวมถึงความกว้าง, ความสูง, และความกว้างที่ก้าวหน้า.
- รวมความกว้างที่ก้าวหน้าของ glyph ทั้งหมดในสตริงเพื่อหาความกว้างรวมของสตริง โปรดใส่ใจกับข้อมูลการเคอร์นิง.
หากอธิบายกระบวนการที่คล้ายกันด้วยโค้ด 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));ขั้นตอนการคำนวณจุด glyph ทั้งหมดพร้อมพิกัดโดยใช้ C++:
- ประกาศรายการ points ของประเภท System::Drawing::Point: รายการนี้จะเก็บจุดของเซกเมนต์เส้นทาง glyph.
- ระบุการอ้างอิงบริการ Init บน interface IPathSegment .
- วนลูปผ่านเซกเมนต์เส้นทาง glyph ทั้งหมดและรวมจุด.
โค้ด C++ สำหรับหาจุด glyph
//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. วิธีจัดการ Glyphs ด้วยโซลูชัน API นี้
หากต้องการโค้ดสัญลักษณ์ใน C# ให้ใช้เอนทิตีของเนมสเปซ Aspose.Font.Glyphs
4. เมตริกสัญลักษณ์มีความสำคัญอย่างไร
ด้วยการทำความเข้าใจและปรับการวัดสัญลักษณ์อย่างถูกต้อง นักพิมพ์และนักออกแบบสามารถรับประกันระยะห่าง การจัดตำแหน่ง และความชัดเจนของข้อความในสื่อสิ่งพิมพ์ อินเทอร์เฟซดิจิทัล หรือหน้าเว็บที่เหมาะสมที่สุด