Comment charger les polices ? | Solution API pour .NET

Aperçu

Pour répondre à la question de savoir comment charger les polices, nous devons d’abord apprendre que toute police est physiquement un tableau d’octets dans lequel les données sont représentées dans un certain format. Par conséquent, pour un chargement correct des polices, vous devez connaître deux paramètres clés :

Objets et paramètres requis pour le chargement des polices

Aspose.Font pour .NET donne un objet FontDefiniton pour notifier deux paramètres clés requis pour le chargement de la police. Après avoir créé et lancé l’objet FontDefiniton, il vous suffit d’appeler la méthode statique Aspose.Font.Font.Open() et de transmettre l’objet simplement initialisé FontDefiniton comme un paramètre pour charger la police souhaitée et obtenir une référence dessus.

Décrivons-le avec le pseudocode :

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

Le résultat final du chargement de la police est d’obtenir un objet de type Aspose.Font.Font. La classe Aspose.Font.Font est une classe de police de base de Aspose.Font pour la bibliothèque .NET. Il représente la fonctionnalité principale du travail avec les polices.

En chargeant une police dans un objet de type Aspose.Font.Font, vous pourrez restituer le texte avec cette police, obtenir des données d’encodage et des métriques de police. Vous pourrez également modifier ou enregistrer cette police et bien d’autres.

Pour lancer l’objet FontDefiniton, nous devons, comme mentionné précédemment, lui donner 2 paramètres de police : le type de format et l’objet qui décrit le stockage des données binaires de police. Le premier paramètre est notifié avec l’énumération FontType.

Pour simplifier le travail avec le deuxième paramètre, Aspose.Font propose une série d’objets qui donnent un accès universel aux données binaires de la police indépendamment de l’endroit où la police est placée.

Cet accès universel est lié à un flux d’octets. Ainsi, indépendamment de l’endroit où la police est placée - dans un fichier sur un disque, dans un autre fichier, dans un tableau d’octets en mémoire - dans tous les cas, des objets spéciaux Aspose.Font fourniront un accès au flux d’octets. , lié à la police souhaitée.

Décrivons ces objets :

  1. Classe StreamSource. Cette classe de base abstraite définit les propriétés et méthodes qui donnent accès au flux d’octets de police.

La méthode GetFontStream() de cette classe renvoie un flux lié aux données de police binaires. La propriété Offset pointe sur la position au niveau de ce flux, à partir de laquelle nous devons commencer à lire les données.

  1. Deux classes les plus utilisées héritées de la base StreamSource :

Comment initier les cours ?

Voici des exemples d’initiation de ces cours.1. Supposons que la police se trouve dans le fichier nommé Lora.ttf. Dans ce cas, pour accéder au flux d’octets de cette police, nous devons créer l’objet de type FileSystemStreamSource en utilisant ce constructeur unique :

1 
2    FileSystemStreamSource fontSource = new FileSystemStreamSource("Lora.ttf");
  1. Si les données binaires de la police sont situées dans un tableau binaire défini par la variable byte [] fontArray, alors un objet de type ByteContentStreamSource fournira un accès au flux de données de la police, basé sur la variable fontArray. . Pour accéder au flux d’octets de police, nous devons créer un objet de type ByteContentStreamSource pour accéder au flux, lié au tableau d’octets de police en utilisant un code comme celui-ci :
1 
2    ByteContentStreamSource fontSource = new ByteContentStreamSource(fontArray);

Ainsi, pour donner accès aux données binaires des polices, utilisez des objets hérités de la classe de base StreamSource. De plus, nous appellerons ces objets sources de flux de polices.

Objet FontFileDefinition

La plupart des polices se trouvent dans des fichiers normaux, mais en même temps, certaines polices peuvent avoir des sources de données différentes. Pour joindre en un seul objet les termes fichier et flux binaire de polices, la bibliothèque Aspose.Font fournit un objet spécial FontFileDefinition.

Cet objet a les propriétés suivantes :

Le constructeur le plus simple et l’un des plus utilisés de cet objet est le constructeur avec la signature suivante : FontFileDefinition (FileInfo fontFile), utilisez ce constructeur dans les cas où la police souhaitée se trouve dans un fichier sur le disque dur .

Voici un exemple d’initialisation d’un tel objet pour la police Montserrat qui se trouve dans le fichier C:\Windows\Fonts\Montserrat.ttf :

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

De plus, FontFileDefinition peut référencer la police Montserrat en utilisant les constructeurs suivants :

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"));

Le paramètre fileExtension doit correspondre à l’extension standard pour le format de police. Par exemple, si le format de police est « TrueType », alors la valeur du paramètre fileExtension peut être « ttf » ou « ttc » (si le fichier de police est une collection de polices « TrueType »).

Si le format de police est « Embedded Open Type », alors la valeur du paramètre fileExtension doit être « eot ».

Le tableau ci-dessous présente les formats de fichier de police Aspose.Font pour .NET les plus souvent utilisés. Les voilà avec les valeurs correspondantes que le paramètre fileExtension devrait prendre.

Format du fichier de policeExtension de fichier
TrueType, police uniquettf
Collection de polices TrueTypettc
Web Open Font Formatwoff
Web Open Font Format version 2.0woff2
Embedded OpenTypeeot
Police Adobe Type 1pfa, pfb, afm, pfm
Compact Font Formatcff, peut être null

Si les données de police ne démarrent pas à partir de la position 0 du flux d’octets, utilisez le constructeur suivant avec le paramètre offset :

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

Comment lancer l’objet FontDefinition ?

Maintenant, lorsque vous aurez une idée des objets hérités de la classe StreamSource et donnant accès au flux d’octets de police, et de l’objet FontFileDefinition, nous expliquerons à vous explique comment lancer correctement l’objet FontDefiniton avec ces objets pour différentes situations.

L’objet FontDefiniton vous fournit de nombreux constructeurs surchargés. La caractéristique commune à tous les constructeurs existants est le paramètre FontType. Il décrit le type de format de police. Comme cela a été mentionné précédemment, outre la valeur FontType, l’objet FontDefiniton doit être initialisé en référence aux données binaires de la police.

Vous avez peut-être une question. Pourquoi passerions-nous le paramètre fileExtension à l’objet FontDefiniton ou FontFileDefinition, alors que nous passons toujours le paramètre FontType qui semble coïncider par sa valeur avec fileExtension ? Le problème est que FontType ne coïncide pas toujours avec la valeur de fileExtension. FontType définit le format de police commun mais pas le format de police d’un fichier spécifique. Certaines polices d’un même format peuvent avoir des formats de fichiers différents.

Par exemple, la valeur FontType.TTF définit le format « TrueType ». Mais en même temps, TrueType inclut quelques formats de police et il existe des fichiers de polices avec les extensions ttf, eot, ttc, etc. Et si, par exemple, pour la police au format EOT nous passons à FontDefiniton uniquement la valeur FontType.TTF, alors comment cet objet comprendra-t-il que la police appartient au format EOT et non à ` TTF ?

De la même manière, la valeur de FontType.Type1 est la définition courante des polices de ce format. Dans le même temps, les fichiers de polices au format Type1 ont les extensions .pfa, .pfb, .afm, .pfm. Vous ne pouvez donc pas définir correctement le format de fichier de police en vous basant uniquement sur la valeur FonType.Type1. Par conséquent, pour définir correctement le format de police, nous devons spécifier le paramètre FontType avec la valeur du paramètre fileExtension.

Ci-dessous, vous pouvez découvrir des exemples d’initialisation d’objet FontDefiniton et de chargement de police suivant pour différents cas.

Dans tous les cas, le résultat final du chargement de la police est mis dans la variable de type Aspose.Font.Font. Ce type est la classe de police de base de la bibliothèque Aspose.Font et les objets de ce type fournissent des fonctionnalités de base communes pour travailler avec les polices. En chargeant la police dans cet objet, vous pourrez restituer le texte avec cette police, obtenir des informations de codage, des métriques de police, etc.

Exemples de chargement de polices

Prenons comme exemple le chargement de la police Montserrat à partir du fichier C:\Windows\Fonts\Montserrat.ttf

Ajoutez les espaces de noms suivants en tête du fichier :

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

Vous pouvez charger cette police à l’aide des objets FontDefiniton et FontFileDefinition de différentes manières :

Chargement à l’aide de l’objet System.IO.FileInfo

Pour effectuer le chargement, procédez comme suit :

  1. Construisez le chemin d’accès au fichier.
  2. Initiez l’objet FontDefiniton en passant TTF comme valeur FontType.
  3. Obtenez la valeur calculée automatiquement fileExtension.
  4. Chargez la police.
 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);

Chargement à l’aide d’un objet de type FileSystemStreamSource

Suivez les étapes suivantes pour réaliser l’opération :

  1. Construisez le chemin d’accès au fichier.
  2. Initiez l’objet FontDefiniton.
  3. Définissez fileExtension sur ttf.
  4. Chargez la police.
 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);

Chargement de polices sans objet FontFileDefinition, en passant FileSystemStreamSource directement à FontDefinition

Les actions suivantes doivent être entreprises pour charger la police de cette façon :

  1. Construisez le chemin d’accès au fichier.
  2. Initiez l’objet FontDefiniton en passant TTF comme valeur FontType, ttf comme valeur fileExtension et l’objet FileSystemStreamSource . Le paramètre fileExtension n’est pas ici une valeur en double pour le paramètre FontType.
  3. Chargez la police.
 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);

Chargement de police avec la variable de type byte[] et avec l’utilisation de l’objet de type ByteContentStreamSource

Pour charger une police à partir du tableau d’octets, vous devez :

  1. Construisez le chemin d’accès au fichier.
  2. Chargez les données binaires de la police dans le tableau d’octets
  3. Initialisez l’objet FontDefiniton en passant TTF comme valeur FontType, ttf comme valeur fileExtension et ByteContentStreamSource objet basé sur le tableau fontBytes.
  4. Chargez la police.
 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);

Pour obtenir plus d’exemples d’utilisation de Aspose.Font, accédez à la solution Aspose.Font.Examples.sln, dans les net-examples de la documentation Aspose.Font

S’il vous reste des problèmes ou des questions, vous pouvez les publier dans la section Aspose.Font.Product Family du Free Support Forum et dans quelques heures, notre équipe d’assistance vous répondra. clarifie tout pour toi.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.