อ่าน 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 ก่อน แล้วรวมความกว้างเหล่านั้นเพื่อหาค่ารวม หากอธิบายขั้นตอนแล้วลำดับจะเป็นดังนี้:

  1. กำหนดแบบอักษรและขนาดที่ต้องการใช้เพื่อคำนวณความกว้างของสตริง.
  2. สำหรับแต่ละอักขระในสตริง ให้กำหนด glyph ที่สอดคล้องในแบบอักษร ใช้ character map เพื่อรับดัชนีของ glyph นั้น.
  3. โดยใช้ดัชนี glyph, ค้นหาข้อมูล metrics ของ glyph ในตาราง metrics ของแบบอักษร Metrics ของ glyph ปกติจะรวมถึงความกว้าง, ความสูง, และความกว้างที่ก้าวหน้า.
  4. รวมความกว้างที่ก้าวหน้าของ 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++:

  1. ประกาศรายการ points ของประเภท System::Drawing::Point: รายการนี้จะเก็บจุดของเซกเมนต์เส้นทาง glyph.
  2. ระบุการอ้างอิงบริการ Init บน interface IPathSegment .
  3. วนลูปผ่านเซกเมนต์เส้นทาง 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. เมตริกสัญลักษณ์มีความสำคัญอย่างไร

ด้วยการทำความเข้าใจและปรับการวัดสัญลักษณ์อย่างถูกต้อง นักพิมพ์และนักออกแบบสามารถรับประกันระยะห่าง การจัดตำแหน่ง และความชัดเจนของข้อความในสื่อสิ่งพิมพ์ อินเทอร์เฟซดิจิทัล หรือหน้าเว็บที่เหมาะสมที่สุด