قراءة معلومات المقاطع والمقاييس
حل API للغة C++ لحساب عرض السلسلة، حساب إحداثيات المقاطع، وغيرها من التلاعبات بالمقاطع.
يقدم Aspose.Font API مجموعة شاملة من الوظائف المتعلقة بالخطوط، بما في ذلك التحويل، التلاعب بالمقاطع، اكتشاف الرموز اللاتينية، والمزيد. بعض هذه الميزات تتعلق بالتلاعب بالمقاطع، وهي الأحرف الفردية لنوع الخط أو تمثيل رسومي للرموز/الأحرف. لمعرفة المزيد عن هذه الوحدات الخطية، راجع مقالة مقدمة عن المقاطع .
هذه الصفحة توضح خيار قراءة معلومات المقاطع والمقاييس، ولكن لفهم كامل للوظائف، راجع مقالة استخدام كائنات المقاطع . هنا، ستجد العديد من أمثلة الشيفرة C++ وتتعرف على قدرات Aspose.Font للعمل مع المقاطع وكائنات المقاطع. يمكن العثور على مزيد من أمثلة الشيفرة التي توضح استخدام Aspose.Font لتعديل المقاطع في مشروع Aspose Github .
مقاييس المقاطع، المصطلح المستخدم هنا، تشير إلى المعلومات والقياسات لمقطع معين في الخط. قد تشمل معلومات مثل الارتفاع، العرض، عرض التقدم، وغيرها من أبعاد المقطع، والتي هي مهمة للتموضع والمسافات الصحيحة للأحرف في الخط. تُستخدم هذه المقاييس من قبل أنظمة تخطيط النص والعرض لضمان عرض النص بشكل متسق ودقيق.
للعمل مع المقاطع نحتاج إلى:
Aspose.Font لـ 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: ستخزن هذه القائمة نقاط مقطع مسار المقطع.
- حدد مرجع خدمة Init على واجهة IPathSegment .
- تجول عبر جميع مقاطع مسار المقاطع واجمع النقاط.
الكود 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. ما هي أهمية مقاييس الصورة الرمزية؟
من خلال فهم مقاييس الحروف الرسومية وضبطها بشكل صحيح، يستطيع مصممو الطباعة والمصممون ضمان التباعد الأمثل والمحاذاة وسهولة قراءة النص في المواد المطبوعة أو الواجهات الرقمية أو صفحات الويب.