如何加载字体? | .NET的API解决方案

概述

为了回答这个问题,如何加载字体,首先我们需要学习任何字体在物理上都是一个字节数组,其中数据以某种格式表示。 因此,要正确的字体加载,您需要知道两个关键参数:

字体加载所需的对象和参数

适用于 .NET 的 Aspose.Font给对象 fontdefiniton通知字体加载所需的两个关键参数。 在创建和启动 fontdefiniton对象之后,您只需要调用静态方法 aspose.font.font.open()(3),然后仅通过初始化对象 fontdefiniton作为参数即可加载所需的字体并在其上获取参考。

让我们用伪代码来描述它:

1 
2using Aspose.Font;
3    ...
4
5    // Initialize object FontDefinition with appropriate properties
6    FontDefinition fontDef = new FontDefinition(); 
7    Font desiredFont = Font.Open(fontDef);

字体加载的最终结果是获得 aspose.font.font类型的对象。 class aspose.font.font是.NET库的 Aspose.font的基本字体类。它代表使用字体工作的主要功能。

将字体加载到 aspose.font.font键入对象中,您将能够使用此字体呈现文本,获取编码数据和字体指标。您还可以修改或保存此字体等。

为了启动 fontdefiniton我们需要的对象,如前所述,给出了2个字体参数 - 格式类型,以及描述字体二进制数据存储的对象。 通过 fonttype枚举通知第一个参数。

为了简化第二个参数的工作, aspose.font提供了一系列对象,可通过放置字体独立于置换字体二进制数据。

这种通用访问与字节流这样的东西链接。 因此,独立于将字体放置在磁盘上的文件中,在另一个文件中,内存中的字节数组中的一个文件 - 在任何情况下,特殊 aspose.font对象将提供与所需字体有关的字节流。

让我们描述这些对象:

  1. streamsource类。 该抽象基类定义了访问字体字节流的属性和方法。 getFontStream()此类方法返回与二进制字体数据有关的流。 属性 offset在此流的位置上的点,从那里我们必须开始读取数据。
  2. 从基础 streamsource继承的两个最常用的类:

如何开始课程?

以下是这些班级启动的示例。

  1. 假设字体在名为lora.ttf的文件中。在这种情况下,要访问此字体的字节流,我们需要使用此单个构造函数来创建类型 filesystemstreamsource的对象:
1 
2    filesystemstreamsource fontsource = new filesystemstreamsource( lora.ttf);
  1. 如果字体二进制数据位于由字节[] fontarray变量定义的二进制数组中,则类型为 bytecontentstreamsource的对象将根据Fontarray变量提供对字体数据流的访问。 要访问字体字节流,我们必须创建一个类型的对象 bytecontentstreamsource才能使用类似代码与字体字节数组相关的流访问流:
1 
2    ByteContentStreamSource fontSource = new ByteContentStreamSource(fontArray);

因此,要提供对字体二进制数据的访问,请使用从基础 streamsource类继承的对象。此外,我们将称之为此类对象字体流源

fontfiledefinition对象

大多数方面都位于常规文件中,但同时,一部分字体可能具有不同的数据源。要加入一个对象项文件font二进制流aspose.font库提供特殊对象 fontfiledefinition

该对象具有这样的属性:

该对象的最简单和最常用的构造函数之一是具有以下签名的构造函数: fontfiledefinition(fileinfo fontfile),在硬盘驱动器上的文件中使用此构造函数。

下面是为位于文件 C:\Windows\Fonts\Montserrat.ttf 中的字体Montserrat启动此类对象的示例:

1 
2    FontFileDefinition fileDef = new FontFileDefinition(new FileInfo(@"C:\Windows\Fonts\Montserrat.ttf"));

另外, fontfiledefinition可以使用以下构造函数引用`蒙特塞拉特字体:

1 
2    FontFileDefinition fileDef = new FontFileDefinition(new FileSystemStreamSource(@"C:\Windows\Fonts\Montserrat.ttf"));
3
4    FontFileDefinition fileDef = new FontFileDefinition("ttf", new FileSystemStreamSource(@"C:\Windows\Fonts\Montserrat.ttf"));

参数 fileextension应与标准相匹配,对于字体格式,扩展名。例如,如果字体格式为trueType,则 fileextension参数的值可以为ttfttc(如果字体文件是trueType fonts的集合)。 如果字体格式为“嵌入式打开类型”,则 fileextension参数的值应为eot

下表显示了.net字体文件格式中最常使用的aspose.font中使用的。在那里,它们具有 fileextension参数应为的匹配值。

字体文件格式文件扩展名
TrueType, single fontttf
TrueType font collectionttc
Web Open Font Formatwoff
Web Open Font Format version 2.0woff2
Embedded OpenTypeeot
Adobe Type 1 fontpfa, pfb, afm, pfm
Compact Font Formatcff, can be null

如果字体数据不是从字节流的位置0启动,则将以下构造函数使用 offset参数:

1 
2    FontFileDefinition(string fileExtension, StreamSource streamSource, long offset).

如何启动FontDefinition对象?

现在,当您了解从 streamSource类继承的对象并提供对字体字节流的访问权限以及 fontfiledefinition对象的访问,我们将向您解释如何启动 fontdefiniton与这些对象适当的对象。

fontdefiniton对象为您提供许多超载构造函数。 所有现有构造函数的共同特征是 fonttype参数。它描述了字体格式的类型。 如前所述,除 fonttype值之外,应参考字体二进制数据初始化对象 fontdefiniton

fontdefiniton构造函数的下一个参数可以在这种情况下使用:- fontname;

您可能有个疑问。我们总是传递参数 FontType,而它的值似乎与 fileExtension 一致,为什么还要将参数 fileExtension 传递给 FontDefinitonFontFileDefinition 对象呢? 问题在于 FontType 的值并不总是与 fileExtension 的值一致。 FontType 定义了通用字体格式,但没有定义特定文件的字体格式。某些同一种格式的字体可能有不同的文件格式。 例如,值 FontType.TTF 定义了 TrueType 格式。但同时,TrueType 包含几种字体格式,其中包含以 ttfeotttc 等为扩展名的字体文件。例如,对于 EOT 格式的字体,如果我们只将 FontType.TTF 值传递给 FontDefiniton,那么该对象如何理解该字体属于 EOT 格式而不是 TTF 格式呢? 同样,FonType.Type1 的值是此格式字体的通用定义。同时,Type1 格式的字体文件以 .pfa.pfb.afm.pfm 为扩展名。因此,仅依靠 FonType.Type1 值无法正确定义字体文件格式。因此,为了正确定义字体格式,我们需要指定参数 FontTypefileExtension 参数的值。

在下面,您可以学习 fontdefiniton对象初始化和针对不同情况的字体加载后的示例。

在所有情况下,最终的字体加载结果都放入 Aspose.font.font类型的变量中。这种类型是 aspose.font库的基本字体类,此类型的对象为使用字体提供了共同的基本功能。 将字体加载到此对象中,您将能够使用此字体呈现文本,获取编码信息,字体指标等。

如何加载字体的示例

让我们举一个例子,从文件C上加载字体montserrat

在文件的头部添加下一个名称空间:

1    using System;
2    using Aspose.Font;
3    using Aspose.Font.Sources;
4    using System.IO;

您可以使用 fontdefinitonfontfiledefinition对象加载此字体:

借助system.io.fileinfo对象加载

要实现加载,请执行下一个:

  1. 构建文件的路径。
  2. 启动 fontdefiniton对象传递ttffonttype值。
  3. 获取自动计算的值 fileextension
  4. 加载字体。
 1    // Construct path to the file
 2    string fontPath = @"C:\Windows\Fonts\Montserrat.ttf";
 3
 4    // Initialize FontDefinition object passing TTF as FontType value and using FontFileDefinition
 5    FontFileDefinition fileDef = new FontFileDefinition(new FileInfo(fontPath));
 6
 7    // Based on FileInfo object, fileExtension value is calculated automatically from FileInfo fields.
 8    FontDefinition fontDef = new FontDefinition(FontType.TTF, fileDef);
 9	
10    // Load font
11    Font font = Font.Open(fontDef);

借助filesystemstreamsource类型对象加载

采取下一步完成操作:

  1. 构建文件的路径。
  2. 启动 fontdefiniton对象。
  3. fileextension设置为ttf
  4. 加载字体。
 1    // Construct path to the file
 2    string fontPath = @"C:\Windows\Fonts\Montserrat.ttf";
 3
 4    // Initialize FontDefinition object passing TTF as FontType value and using FontFileDefinition
 5    FontFileDefinition fileDef = new FontFileDefinition("ttf", new FileSystemStreamSource(fontPath));
 6
 7    // Based on FileSystemStreamSource object, set fileExtension to "ttf"
 8    FontDefinition fontDef = new FontDefinition(FontType.TTF, fileDef);
 9		
10    // Load font   
11    Font font = Font.Open(fontDef);

字体加载无FontfiledEfinition对象,将FifeSystreamSource直接传递给FontDefinition

必须采取下一个操作以使字体加载:

  1. 构建文件的路径。
  2. 启动 fontdefiniton对象传递ttf as fonttypevalue,ttf as fileextension值(73)值和 FileSystemStreamSource对象。参数 fileextension这不是参数 fonttype的重复值。
  3. 加载字体。
 1    // Construct path to the file
 2    string fontPath = @"C:\Windows\Fonts\Montserrat.ttf";
 3
 4    // Initialize FontDefinition object passing TTF as FontType value, "ttf" as fileExtension value, 
 5    // and FileSystemStreamSource object. Parameter 'fileExtension' here is not duplicate value 
 6    // for parameter 'FontType' and it's needed for correct font format detection
 7    FontDefinition fontDef = new FontDefinition(FontType.TTF, "ttf", new FileSystemStreamSource(fontPath));
 8
 9    // Load font	
10    Font font = Font.Open(fontDef);

字体加载字节[]类型变量以及使用ByteContentsTreamSource类型对象

要从字节数组加载字体,您需要:

  1. 构建文件的路径。
  2. 将字体二进制数据加载到字节数组中
  3. 初始化 fontdefiniton对象传递ttffonttypevalue,ttf as fileextension值和 bytecontentstreamsource基于fontbytes array上的对象。
  4. 加载字体。
 1    // Construct path to the file
 2    string fontPath = @"C:\Windows\Fonts\Montserrat.ttf";
 3
 4    // Load font binary data into byte array
 5    byte[] fontBytes;
 6
 7    // Initialize FontDefinition object  passing TTF as FontType value, "ttf" as fileExtension value, 
 8    // and ByteContentStreamSource object based on fontBytes array
 9    FontDefinition fontDef = new FontDefinition(FontType.TTF, "ttf", new ByteContentStreamSource(fontBytes));
10	
11    // Load font	
12    Font font = Font.Open(fontDef);

要获取更多使用 Aspose.Font 的示例,请转到 Aspose.Font 文档 中的 net-examples

如果您还有任何问题或疑问,您可以在 免费支持论坛Aspose.Font.Product Family 部分发布它们,我们的支持团队将在几个小时内为您解决所有问题。

Have any questions about Aspose.Font?



Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.

OSZAR »