Kết xuất phông chữ truetype c ++

Các ký tự là các ký hiệu giải thích ý nghĩa của các từ khác nhau. Bạn có thể hiển thị các ký tự văn bản khác nhau bằng Phông chữ TrueType bằng C++ với Aspose.Font for C++ API. Nó hỗ trợ các tính năng hiển thị văn bản khác nhau bao gồm TrueType, Type1, OTF, EOT và các phông chữ khác. Hãy để chúng tôi khám phá cách sử dụng các tính năng kết xuất văn bản với một vài lệnh gọi API đơn giản. Chúng tôi sẽ đề cập đến chủ đề dưới các tiêu đề sau:

C++ TrueType Font Rendering API – Cài đặt

Xem xét mức độ phổ biến và nhu cầu của nền tảng C++, chúng tôi đã giới thiệu các tính năng rất hữu ích trong Aspose.Font for C++ API. Để hiển thị phông chữ TrueType trong các ứng dụng của bạn, bạn cần định cấu hình API bằng cách tải xuống từ Bản phát hành mới hoặc bạn có thể cài đặt nó qua NuGet bằng cách sử dụng lệnh sau:

Install-Package Aspose.Font.Cpp

Triển khai Giao diện Vẽ Glyph để Kết xuất Phông chữ TrueType bằng C++

Trước hết, bạn cần triển khai IGlyphOutlinePainter trong không gian tên Aspose.Font.Rendering. Thực hiện theo các bước dưới đây để triển khai các phương thức và lớp:

  1. Tạo một lớp có tên GlyphOutlinePainter
  2. Sử dụng System.Drawing.Drawing2D.GraphicsPath để vẽ đồ họa

Dưới đây là đoạn mã C++ để triển khai giao diện nhằm vẽ các hình tượng:

For complete examples and data files, please go to https://github.com/aspose-font/Aspose.Font-for-C
RenderingText::GlyphOutlinePainter::GlyphOutlinePainter(System::SharedPtr<System::Drawing::Drawing2D::GraphicsPath> path)
{
    _path = path;
}

void RenderingText::GlyphOutlinePainter::MoveTo(System::SharedPtr<Aspose::Font::RenderingPath::MoveTo> moveTo)
{
    _path->CloseFigure();
    _currentPoint.set_X((float)moveTo->get_X());
    _currentPoint.set_Y((float)moveTo->get_Y());
}

void RenderingText::GlyphOutlinePainter::LineTo(System::SharedPtr<Aspose::Font::RenderingPath::LineTo> lineTo)
{
    float x = (float)lineTo->get_X();
    float y = (float)lineTo->get_Y();
    _path->AddLine(_currentPoint.get_X(), _currentPoint.get_Y(), x, y);
    _currentPoint.set_X(x);
    _currentPoint.set_Y(y);
}

void RenderingText::GlyphOutlinePainter::CurveTo(System::SharedPtr<Aspose::Font::RenderingPath::CurveTo> curveTo)
{
    float x3 = (float)curveTo->get_X3();
    float y3 = (float)curveTo->get_Y3();
    
    _path->AddBezier(_currentPoint.get_X(), _currentPoint.get_Y(), (float)curveTo->get_X1(), (float)curveTo->get_Y1(), (float)curveTo->get_X2(), (float)curveTo->get_Y2(), x3, y3);
    
    _currentPoint.set_X(x3);
    _currentPoint.set_Y(y3);
}

void RenderingText::GlyphOutlinePainter::ClosePath()
{
    _path->CloseFigure();
}

System::Object::shared_members_type Aspose::Font::Examples::WorkingWithTrueTypeAndOpenTypeFonts::RenderingText::GlyphOutlinePainter::GetSharedMembers()
{
    auto result = System::Object::GetSharedMembers();
    
    result.Add("Aspose::Font::Examples::WorkingWithTrueTypeAndOpenTypeFonts::RenderingText::GlyphOutlinePainter::_path", this->_path);
    result.Add("Aspose::Font::Examples::WorkingWithTrueTypeAndOpenTypeFonts::RenderingText::GlyphOutlinePainter::_currentPoint", this->_currentPoint);
    
    return result;
}

Thứ hai, vui lòng tạo một phương thức có tên DrawText với các bước sau:

  1. Lặp qua các ký hiệu trong chuỗi văn bản
  2. Nhận GID dưới dạng glyph được xác định cho từng biểu tượng
  3. Tạo GlyphOutlinePainter và chuyển qua đối tượng GlyphOutlineRenderer
  4. Chỉ định tọa độ Glyph với đối tượng Matrix

Ngoài ra, sau khi làm theo tất cả các bước này, hãy tạo phương thức tiện ích để tính kích thước phông chữ cho hình ảnh như được trình bày chi tiết trong đoạn mã C++ sau:

For complete examples and data files, please go to https://github.com/aspose-font/Aspose.Font-for-C
double RenderingText::FontWidthToImageWith(double width, int32_t fontSourceResulution, double fontSize, double dpi /* = 300*/)
{
    double resolutionCorrection = dpi / 72;
    // 72 là dpi bên trong của phông chữ
    return (width / fontSourceResulution) * fontSize * resolutionCorrection;
}

Kết xuất văn bản với Phông chữ TrueType bằng C ++

Chúng tôi đã triển khai chức năng cần thiết để hiển thị văn bản bằng phông chữ TrueType. Bây giờ, chúng ta hãy gọi các phương thức sử dụng API Aspose.Font cho C++ dưới dạng đoạn mã bên dưới:

For complete examples and data files, please go to https://github.com/aspose-font/Aspose.Font-for-C
System::String dataDir = RunExamples::GetDataDir_Data();
    
System::String fileName1 = dataDir + u"Montserrat-Bold.ttf";
//Tên tệp phông chữ với đường dẫn đầy đủ
System::SharedPtr<FontDefinition> fd1 = System::MakeObject<FontDefinition>(Aspose::Font::FontType::TTF, System::MakeObject<FontFileDefinition>(u"ttf", System::MakeObject<FileSystemStreamSource>(fileName1)));
System::SharedPtr<TtfFont> ttfFont1 = System::DynamicCast_noexcept<Aspose::Font::Ttf::TtfFont>(Aspose::Font::Font::Open(fd1));
    
System::String fileName2 = dataDir + u"Lora-Bold.ttf";
//Tên tệp phông chữ với đường dẫn đầy đủ
System::SharedPtr<FontDefinition> fd2 = System::MakeObject<FontDefinition>(Aspose::Font::FontType::TTF, System::MakeObject<FontFileDefinition>(u"ttf", System::MakeObject<FileSystemStreamSource>(fileName2)));
System::SharedPtr<TtfFont> ttfFont2 = System::DynamicCast_noexcept<Aspose::Font::Ttf::TtfFont>(Aspose::Font::Font::Open(fd2));
    
DrawText(u"Hello world", ttfFont1, 14, System::Drawing::Brushes::get_White(), System::Drawing::Brushes::get_Black(), dataDir + u"hello1_montserrat_out.jpg");
DrawText(u"Hello world", ttfFont2, 14, System::Drawing::Brushes::get_Yellow(), System::Drawing::Brushes::get_Red(), dataDir + u"hello2_lora_out.jpg");

Sự kết luận

Trong bài viết này, bạn đã học cách hiển thị văn bản bằng phông chữ TrueType với C++. Muốn tìm hiểu thêm về các tính năng được cung cấp bởi Aspose.Font cho API C++? Bạn có thể tìm hiểu thêm chi tiết bằng cách khám phá Tài liệu tham khảo API hoặc Tài liệu sản phẩm. Tuy nhiên, nếu bạn gặp phải bất kỳ sự mơ hồ nào hoặc cần hỗ trợ, vui lòng liên hệ với chúng tôi qua Diễn đàn hỗ trợ miễn phí. Chúng tôi mong được tham gia với bạn!

Xem thêm