从字节数组加载字体文件

C++ API 解决方案用于从 MemoryStream 加载 TTF、WOFF、EOT、Type 1 和 CFF 字体。

 

Aspose.Font API 解决方案为您提供了广泛的字体处理功能,包括转换、字形操作、拉丁符号检测等。但在进行字体处理之前的第一步是加载字体文件,以便后续使用。

本文概述了如何从流加载字体文件,如需更详细的字体加载信息,请参阅文章 How to Load Files? 。在那里您会找到大量 C++ 代码示例,并了解字体加载所需的对象和参数。

该 API 支持多种字体格式,包括 TrueType(单一字体)、TrueType(字体集合)、Web Open Font Format、Web Open Font Format 2.0、Embedded OpenType、Adobe Type 1 字体(pfa、pfb、afm、pfm)以及 Compact Font Format。提供的代码片段演示了如何从流加载 True Type Font(TTF)文件。

正如我们从 Wikipedia 了解到的,TTF 代表 TrueType Font,是一种可伸缩的计算机字体文件格式。它最初由 Apple Computer 开发,但如今在 Mac 和 Windows 操作系统上都被广泛使用。TTF 文件包含如何在不同字体大小和样式下渲染每个字符的指令,并且可以轻松地调整大小并在不同应用中使用而不失真。TTF 字体在数字排版中被广泛使用,常见于网页设计、文字处理和桌面出版。

要加载字体,您需要 Aspose.Font for C++ API,这是一款功能强大、易于使用的文档操作和转换 API,适用于 C++ 平台。获取该 API,请打开 NuGet 包管理器,搜索 Aspose.Font 并进行安装。您也可以在包管理器控制台中使用以下命令。

Package Manager Console Command


    PM> Install-Package Aspose.Font

使用 C++ 从字节数组/MemoryStream 加载 TTF

此代码片段使用 C++ 编写,演示如何使用 Aspose.Font API 加载 TrueType Font(TTF)文件。代码执行以下步骤:

  1. 构造字体文件的路径。这里,DataDir 是预定义变量,包含字体文件 Montserrat-Regular.ttf 所在目录的路径。Path.Combine 方法将两个路径组合成字体文件的完整路径。
  2. 将字体的二进制数据加载到字节数组中。File.ReadAllBytes() 方法读取字体文件的内容并返回字节数组。
  3. 初始化一个 FontDefinition 对象。 FontType.TTF 表明该字体文件是 TrueType Font(.ttf),并且新建的 ByteContentStreamSource (fontBytes) 根据存储在 fontBytes 数组中的字体二进制数据创建一个 ByteContentStreamSource 对象。
  4. 加载字体。 Font.Open() 方法接受 FontDefinition 对象作为参数,返回已加载的字体,随后可用于进一步操作。

用于从流加载字体的 C++ 代码

    using Aspose::Font;
    using Aspose::Font::Sources;
    using Aspose::Font::Ttf;
     // Construct the path to the file
    System::String fontPath = System::IO::Path::Combine(get_DataDir(), u"Montserrat-Regular.ttf");

	// Load font binary data into the byte array
    System::ArrayPtr<uint8_t> fontBytes = System::IO::File::ReadAllBytes(fontPath);
    
    // Initialize the FontDefinition object  passing TTF as the FontType value, "ttf" as the fileExtension value, 
    // and ByteContentStreamSource object based on the fontBytes array
    System::SharedPtr<FontDefinition> fontDef = System::MakeObject<FontDefinition (Aspose::Font::FontType::TTF, u"ttf", System::MakeObject<ByteContentStreamSource>(fontBytes));

     // Load the font
    System::SharedPtr<Aspose::Font::Font> font = Aspose::Font::Font::Open(fontDef);