Đọc thông tin Glyphs và Metrics

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

 

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 với glyphs, phát hiện các ký hiệu Latinh, v.v. Một số tính năng này liên quan đến thao tác với glyphs, là các ký tự riêng lẻ của một kiểu chữ hoặc biểu diễn đồ họa của các ký hiệu/ký tự. Để hiểu thêm về các đơn vị phông chữ này, hãy tham khảo bài viết Giới thiệu về Glyph .

Trang này phác thảo tùy chọn đọc thông tin Glyph và Metrics, nhưng để hiểu đầy đủ về 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ề các khả năng của Aspose.Font để làm việc với các đối tượng glyph và glyph. Bạn có thể tìm thêm các ví dụ mã khác minh họa việc sử dụng Aspose.Font để thao tác Glyph trong Aspose Dự án Github .

Số liệu về nét chữ, thuật ngữ được sử dụng ở đây, đề cập đến thông tin và phép đo của một nét chữ cụ thể trong một phông chữ. Chúng có thể bao gồm thông tin như chiều cao, chiều rộng, chiều rộng trước và các kích thước khác của hình tượng, những thứ quan trọng đối với vị trí và khoảng cách thích hợp của các ký tự trong phông chữ. Các số liệu này được sử dụng bởi hệ thống hiển thị và bố cục văn bản để đảm bảo hiển thị văn bản nhất quán và chính xác.

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

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

  • Mở trình quản lý gói NuGet và tìm kiếm Aspose.Font và cài đặt. Bạn cũng có thể sử dụng lệnh sau từ Bảng điều khiển quản lý gói.

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 cách sử dụng các nét, trước tiên bạn cần xác định chiều rộng của từng nét riêng lẻ trong chuỗi, sau đó tính tổng các chiều rộng đó để có được tổng số. Nếu giải thích nó với các bước thứ tự tiếp theo:

  1. Xác định phông chữ và kích thước mà bạn muốn sử dụng để tính chiều rộng của 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ản đồ ký tự, bản đồ này sẽ cung cấp cho bạn chỉ mục của glyph tương ứng.
  3. Sử dụng chỉ mục glyph, tra cứu số liệu cho glyph trong bảng số liệu của phông chữ. Các số liệu cho một hình tượng thường sẽ bao gồm chiều rộng, chiều cao và chiều rộng trước của nó.
  4. Cộng các chiều rộng nâng cao của tất cả các nét trong chuỗi để có tổng chiều rộng của chuỗi. Lưu ý chú ý đến thông tin kerning.

Nếu mô tả một quy trình tương tự với mã C++, nó sẽ giống như cách tiếp theo.

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 toán tất cả các điểm glyph có 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 trữ các điểm của một đoạn đường dẫn glyph..
  2. Chỉ định tham chiếu dịch vụ Ban đầu trên giao diện IPathSegment .
  3. Lặp lại tất cả các đoạn đường dẫn glyph và tổng hợp các điểm.

Mã C++ để tìm ra các điểm 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.