Charger des polices à partir de fichiers, de flux et de tableaux d’octets dans Java
Chargez et initialisez par programmation des polices TrueType (TTF), OpenType (OTF), WOFF/WOFF2, Embedded OpenType (EOT), Type1 et Compact Font Format (CFF) avec Aspose.Font pour Java. Chargez facilement des polices à partir de chemins de disque, de fichiers système, de flux d’octets ou de tableaux en mémoire, sans dépendre de Java AWT natif ni de l’installation de polices spécifique au système d’exploitation.
Pour ouvrir et utiliser n’importe quelle police avec Aspose.Font pour Java, deux paramètres clés sont requis :
- Format de police (FontType) : Identifie la catégorie générale (par exemple, FontType.TTF, FontType.Type1, FontType.CFF).
- Source binaire de la police (StreamSource/FontFileDefinition) : Encapsule le flux binaire sous-jacent, qu’il se trouve sur le disque, dans une base de données ou dans des flux de documents (par exemple, PDF/DOCX).
- La classe centrale
FontDefinitionassocie ces paramètres, ce qui permet àFont.open(fontDefinition) de retourner un objet unifiécom.aspose.font.Font.
Comment charger une police à l’aide de java.io.File ?
La manière la plus simple de charger des polices stockées sur des disques locaux à l’aide de FontFileDefinition(File file).
import com.aspose.font.*;
import java.io.File;
import java.nio.file.Paths;
public class LoadFontFromFile {
public static void main(String[] args) {
// Step 1: Define path to font file
String fontPath = Paths.get("data", "Montserrat-Regular.ttf").toString();
// Step 2: Create FontFileDefinition from java.io.File
FontFileDefinition fileDef = new FontFileDefinition(new File(fontPath));
// Step 3: Create FontDefinition (extension is auto-detected from FontFileDefinition)
FontDefinition fontDef = new FontDefinition(FontType.TTF, fileDef);
// Step 4: Open and load font instance
Font font = Font.open(fontDef);
System.out.println("Successfully loaded font: " + font.getFontName());
}
}Comment charger une police à l’aide de FileSystemStreamSource ?
Fournit une gestion explicite des extensions de fichiers pour une détection précise du format lors du chargement de polices à partir de chemins de disque.
import com.aspose.font.*;
import java.nio.file.Paths;
public class LoadFontFromStreamSource {
public static void main(String[] args) {
String fontPath = Paths.get("data", "Montserrat-Regular.ttf").toString();
// Pass 'ttf' explicitly to ensure proper format mapping
FontFileDefinition fileDef = new FontFileDefinition("ttf", new FileSystemStreamSource(fontPath));
FontDefinition fontDef = new FontDefinition(FontType.TTF, fileDef);
Font font = Font.open(fontDef);
System.out.println("Loaded Font Name: " + font.getFontName());
}
}Comment charger une police à partir d’une source de flux directe (sans FontFileDefinition) ?
Transmettez FileSystemStreamSource directement à FontDefinition pour simplifier le chargement.
import com.aspose.font.*;
import java.nio.file.Paths;
public class LoadFontDirectStream {
public static void main(String[] args) {
String fontPath = Paths.get("data", "Montserrat-Regular.ttf").toString();
// Provide FontType, file extension, and StreamSource directly
FontDefinition fontDef = new FontDefinition(FontType.TTF, "ttf", new FileSystemStreamSource(fontPath));
Font font = Font.open(fontDef);
System.out.println("Loaded Font Name: " + font.getFontName());
}
}Comment charger une police à partir d’un tableau d’octets en mémoire (byte[]) ?
Idéal pour charger des polices récupérées depuis des bases de données, des requêtes réseau, un stockage cloud ou des ressources PDF/DOCX intégrées à l’aide de ByteContentStreamSource.
import com.aspose.font.*;
import java.nio.file.Files;
import java.nio.file.Paths;
public class LoadFontFromByteArray {
public static void main(String[] args) throws Exception {
String fontPath = Paths.get("data", "Montserrat-Regular.ttf").toString();
// Read font binary data into byte array
byte[] fontBytes = Files.readAllBytes(Paths.get(fontPath));
// Initialize FontDefinition with ByteContentStreamSource
FontDefinition fontDef = new FontDefinition(FontType.TTF, "ttf", new ByteContentStreamSource(fontBytes));
// Open font from memory
Font font = Font.open(fontDef);
System.out.println("Loaded Font from Memory: " + font.getFontName());
}
}Installation et configuration
Ajoutez Aspose.Font pour Java à votre projet via Maven.
Package Manager Console Command
<repository>
<id>AsposeJavaAPI</id>
<name>Aspose Java API</name>
<url>https://repository.aspose.com/repo/</url>
</repository>
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-font</artifactId>
<version>Latest</version>
</dependency>
Foire aux questions
1. Pourquoi dois-je transmettre à la fois FontType et fileExtension lors du chargement des polices ?
FontType représente la famille de formats générale (par exemple, FontType.TTF), mais plusieurs formats de fichiers distincts appartiennent à cette famille (tels que .ttf, .eot et .ttc). La spécification de fileExtension garantit que la bibliothèque utilise l’analyseur approprié pour ce format de conteneur spécifique.
2. Puis-je charger des polices directement à partir de champs BLOB d’une base de données ?
Oui. Récupérez les données BLOB sous forme de tableau byte[] et utilisez ByteContentStreamSource pour initialiser FontDefinition sans écrire les données sur le disque.
3. Comment charger une police lorsque les données binaires commencent à un décalage spécifique dans un fichier ?
Utilisez le constructeur FontFileDefinition(String fileExtension, StreamSource streamSource, long offset), en transmettant le décalage en octets où commencent les données de la police.