อ่านสัญลักษณ์และข้อมูลเมตริก

โซลูชัน C++ API เพื่อคำนวณความกว้างของสตริง คำนวณพิกัดสัญลักษณ์ และการปรับแต่งอื่นๆ ด้วยสัญลักษณ์

 

Aspose.Font API นำเสนอฟังก์ชันที่เกี่ยวข้องกับฟอนต์ที่หลากหลาย รวมถึงการแปลง การจัดการร่ายมนตร์ การตรวจจับสัญลักษณ์ละติน และอื่นๆ คุณลักษณะบางอย่างเหล่านี้เกี่ยวข้องกับการจัดการร่ายมนตร์ ซึ่งเป็นอักขระแต่ละตัวของแบบอักษรหรือการแสดงกราฟิกของสัญลักษณ์/อักขระ หากต้องการทำความเข้าใจเพิ่มเติมเกี่ยวกับหน่วยแบบอักษรเหล่านี้ โปรดดูบทความ Introduction to Glyph

หน้านี้สรุปตัวเลือกสำหรับการอ่านข้อมูล Glyph และ Metrics แต่เพื่อความเข้าใจที่สมบูรณ์เกี่ยวกับฟังก์ชันการทำงาน โปรดดูบทความ Using Glyph Objects . ที่นี่ คุณจะพบตัวอย่างโค้ด C++ จำนวนมาก และเรียนรู้เกี่ยวกับความสามารถของ Aspose.Font สำหรับการทำงานกับสัญลักษณ์และวัตถุสัญลักษณ์ ตัวอย่างโค้ดเพิ่มเติมที่สาธิตการใช้ Aspose.Font เพื่อจัดการกับ Glyphs สามารถดูได้ใน Aspose Github Project

Glyph metrics คำที่ใช้ที่นี่ อ้างถึงข้อมูลและการวัดของ glyph เฉพาะในแบบอักษร อาจรวมถึงข้อมูล เช่น ความสูง ความกว้าง ความกว้างล่วงหน้า และมิติอื่นๆ ของสัญลักษณ์ ซึ่งมีความสำคัญต่อการวางตำแหน่งและระยะห่างที่เหมาะสมของอักขระในแบบอักษร เมตริกเหล่านี้ใช้โดยเค้าโครงข้อความและระบบการแสดงผลเพื่อให้แน่ใจว่าข้อความแสดงสอดคล้องและถูกต้อง

ในการทำงานกับร่ายมนตร์เราต้องการ:

  • Aspose.Font สำหรับ C++ API ซึ่งเป็น API การจัดการและการแปลงเอกสารที่มีคุณลักษณะหลากหลาย ทรงพลัง และใช้งานง่าย

  • เปิดตัวจัดการแพ็คเกจ NuGet และค้นหา Aspose.Font และติดตั้ง คุณสามารถใช้คำสั่งต่อไปนี้จาก Package Manager Console

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. ประกาศรายการ points ประเภท System::Drawing::Point: รายการนี้จะเก็บคะแนนของ ส่วนเส้นทางสัญลักษณ์..
  2. ระบุการอ้างอิงบริการ 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. วิธีจัดการ Glyphs ด้วยโซลูชัน API นี้

หากต้องการโค้ดสัญลักษณ์ใน C# ให้ใช้เอนทิตีของเนมสเปซ Aspose.Font.Glyphs

4. เมตริกสัญลักษณ์มีความสำคัญอย่างไร

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