Đọc thông tin Glyphs và Metrics

Giải pháp API C++ để tính chiều rộng chuỗi, tính tọa độ glyph, và các thao tác khác với glyphs.

 

Aspose.Font API cung cấp một loạt các chức năng liên quan đến phông chữ, bao gồm chuyển đổi, thao tác glyphs, phát hiện ký hiệu Latin, và hơn thế nữa. Một số tính năng này liên quan đến việc thao tác glyphs, là các ký tự riêng lẻ của một kiểu chữ hoặc các biểu diễn đồ họa của ký hiệu/ký tự. Để hiểu thêm về các đơn vị này của phông chữ, hãy tham khảo bài viết Giới thiệu về Glyph .

Trang này đưa ra tùy chọn đọc thông tin Glyph và Metrics, nhưng để hiểu đầy đủ chức năng, hãy tham khảo bài viết Sử dụng Đối tượng Glyph . Tại đây, bạn sẽ tìm thấy nhiều ví dụ mã C++ và tìm hiểu về khả năng của Aspose.Font trong việc làm việc với glyphs và Đối tượng Glyph. Nhiều ví dụ mã hơn về việc sử dụng Aspose.Font để thao tác Glyphs có thể được tìm thấy trong Aspose Github Project .

Metrics của glyph, thuật ngữ được dùng ở đây, đề cập đến thông tin và các phép đo của một glyph cụ thể trong phông chữ. Chúng có thể bao gồm các thông tin như chiều cao, chiều rộng, độ rộng di chuyển (advance width), và các kích thước khác của glyph, quan trọng cho việc căn chỉnh và khoảng cách giữa các ký tự trong phông chữ. Các metrics này được hệ thống bố cục và hiển thị văn bản sử dụng để đảm bảo hiển thị chữ nhất quán và chính xác.

Để làm việc với glyphs, chúng ta cần:

  • Aspose.Font cho C++ API - một API mạnh mẽ, giàu tính năng và dễ sử dụng cho việc thao tác và chuyển đổi tài liệu.

  • Mở Trình quản lý gói NuGet, tìm kiếm Aspose.Font và cài đặt. Bạn cũng có thể dùng lệnh sau từ Package Manager Console.

Package Manager Console Command


    PM> Install-Package Aspose.Font

Các bước tính chiều rộng chuỗi bằng C++:

Để tính chiều rộng của một chuỗi bằng glyphs, bạn cần xác định chiều rộng của mỗi glyph riêng lẻ trong chuỗi, sau đó cộng các chiều rộng lại để có tổng. Nếu giải thích bằng các bước, thứ tự như sau:

  1. Xác định phông chữ và kích thước bạn muốn dùng để tính chiều rộng chuỗi.
  2. Đối với mỗi ký tự trong chuỗi, xác định glyph tương ứng trong phông chữ. Sử dụng bảng ánh xạ ký tự, sẽ cho bạn chỉ số của glyph tương ứng.
  3. Sử dụng chỉ số glyph, tra cứu metrics của glyph trong bảng metrics của phông chữ. Metrics của glyph thường bao gồm chiều rộng, chiều cao và advance width.
  4. Cộng lại các advance width của tất cả glyph trong chuỗi để có tổng chiều rộng chuỗi. Lưu ý chú ý tới thông tin kerning.

Nếu mô tả quá trình tương tự bằng mã C++, nó sẽ trông như sau.

Mã C++ để tìm chiều rộng chuỗi

    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ác bước tính tất cả các điểm của glyph với tọa độ bằng C++:

  1. Khai báo danh sách points kiểu System::Drawing::Point: Danh sách này sẽ lưu các điểm của một đoạn đường dẫn glyph.
  2. Chỉ định tham chiếu dịch vụ Init trên giao diện IPathSegment .
  3. Lặp qua tất cả các đoạn đường dẫn glyph và cộng các điểm lại.

Mã C++ để tìm các điểm của 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;
    }



Câu hỏi thường gặp

1. Chỉ số glyph là gì?

Chỉ số hình tượng là các tham số ảnh hưởng đến cách định vị hình tượng khi tạo bố cục văn bản.

2. Chỉ số glyph là gì?

Các số liệu glyph được sử dụng nhiều nhất là chiều rộng trước, gốc, trục bên, đường cơ sở, đi lên, đi lên, đi xuống, đi xuống, hộp giới hạn, chiều cao, chiều rộng và kerning.

3. Làm cách nào để quản lý Glyph bằng Giải pháp API này?

Để mã hóa các hình tượng trong C#, hãy sử dụng các thực thể của không gian tên Aspose.Font.Glyphs .

4. Tầm quan trọng của số liệu hình tượng là gì?

Bằng cách hiểu và điều chỉnh hợp lý các chỉ số hình tượng, người đánh máy và nhà thiết kế có thể đảm bảo khoảng cách, căn chỉnh và mức độ dễ đọc tối ưu của văn bản trong tài liệu in, giao diện kỹ thuật số hoặc trang web.