Caricare font da file, flussi e array di byte in Java
Carica e inizializza programmaticamente font TrueType (TTF), OpenType (OTF), WOFF/WOFF2, Embedded OpenType (EOT), Type1 e Compact Font Format (CFF) utilizzando Aspose.Font per Java. Carica i font senza problemi da percorsi su disco, file di sistema, flussi di byte o array in memoria, senza dipendere dal Java AWT nativo o dall’installazione dei font specifica del sistema operativo.
Per aprire e lavorare con qualsiasi font in Aspose.Font per Java, sono necessari due parametri chiave:
- Formato del font (FontType): Identifica la categoria generale (ad esempio, FontType.TTF, FontType.Type1, FontType.CFF).
- Origine binaria del font (StreamSource/FontFileDefinition): Incapsula il flusso binario sottostante, indipendentemente dal fatto che si trovi su disco, in un database o all’interno dei flussi dei documenti (ad esempio, PDF/DOCX).
- La classe centrale
FontDefinitioncollega questi parametri, consentendo aFont.open(fontDefinition) di restituire un oggetto unificatocom.aspose.font.Font.
Come caricare un font utilizzando java.io.File?
Il modo più semplice per caricare i font memorizzati sulle unità disco locali utilizzando 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());
}
}Come caricare un font utilizzando FileSystemStreamSource?
Fornisce una gestione esplicita delle estensioni dei file per un rilevamento preciso del formato durante il caricamento dei font dai percorsi su disco.
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());
}
}Come caricare un font da un'origine di flusso diretto (senza FontFileDefinition)?
Passa FileSystemStreamSource direttamente a FontDefinition per semplificare il caricamento.
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());
}
}Come caricare un font da un array di byte in memoria (byte[])?
Ideale per caricare font recuperati da database, richieste di rete, archiviazione cloud o risorse PDF/DOCX incorporate utilizzando 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());
}
}Installazione e configurazione
Includi Aspose.Font per Java nel tuo progetto tramite 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>
Domande frequenti
1. Perché devo passare sia FontType che fileExtension durante il caricamento dei font?
FontType rappresenta la famiglia di formati generale (ad esempio, FontType.TTF), ma diversi formati di file appartengono a questa famiglia (come .ttf, .eot e .ttc). Specificare fileExtension garantisce che la libreria utilizzi il parser corretto per quello specifico formato contenitore.
2. Posso caricare i font direttamente dai campi BLOB di un database?
Sì. Recupera i dati BLOB come array byte[] e utilizza ByteContentStreamSource per inizializzare FontDefinition senza scrivere i dati su disco.
3. Come posso caricare un font quando i dati binari iniziano a un offset specifico all’interno di un file?
Utilizza il costruttore FontFileDefinition(String fileExtension, StreamSource streamSource, long offset), passando l’offset in byte in corrispondenza del quale iniziano i dati del font.