Carregar fontes de arquivos, fluxos e matrizes de bytes em Java
Carregue e inicialize programaticamente fontes TrueType (TTF), OpenType (OTF), WOFF/WOFF2, Embedded OpenType (EOT), Type1 e Compact Font Format (CFF) usando o Aspose.Font para Java. Carregue fontes de forma contínua a partir de caminhos de disco, arquivos do sistema, fluxos de bytes ou matrizes na memória, sem depender do Java AWT nativo ou da instalação de fontes específica do sistema operacional.
Para abrir e trabalhar com qualquer fonte no Aspose.Font para Java, são necessários dois parâmetros principais:
- Formato da fonte (FontType): Identifica a categoria geral (por exemplo, FontType.TTF, FontType.Type1, FontType.CFF).
- Origem binária da fonte (StreamSource/FontFileDefinition): Encapsula o fluxo binário subjacente, independentemente de ele estar armazenado no disco, em um banco de dados ou dentro de fluxos de documentos (por exemplo, PDF/DOCX).
- A classe central
FontDefinitionvincula esses parâmetros, permitindo queFont.open(fontDefinition) retorne um objeto unificadocom.aspose.font.Font.
Como carregar uma fonte usando java.io.File?
A maneira mais simples de carregar fontes armazenadas em unidades de disco locais usando 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());
}
}Como carregar uma fonte usando FileSystemStreamSource?
Fornece tratamento explícito das extensões de arquivo para uma detecção precisa do formato ao carregar fontes a partir de caminhos de 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());
}
}Como carregar uma fonte a partir de uma origem de fluxo direto (sem FontFileDefinition)?
Passe FileSystemStreamSource diretamente para FontDefinition para simplificar o carregamento.
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());
}
}Como carregar uma fonte de uma matriz de bytes na memória (byte[])?
Ideal para carregar fontes obtidas de bancos de dados, solicitações de rede, armazenamento em nuvem ou recursos PDF/DOCX incorporados usando 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());
}
}Instalação e configuração
Inclua o Aspose.Font para Java em seu projeto por meio do 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>
FAQ
1. Por que preciso passar tanto FontType quanto fileExtension ao carregar fontes?
FontType representa a família geral do formato (por exemplo, FontType.TTF), mas vários formatos de arquivo distintos pertencem a essa família (como .ttf, .eot e .ttc). Especificar a fileExtension garante que a biblioteca use o analisador correto para esse formato de contêiner específico.
2. Posso carregar fontes diretamente de campos BLOB de um banco de dados?
Sim. Recupere os dados BLOB como um array byte[] e use ByteContentStreamSource para inicializar FontDefinition sem gravar os dados no disco.
3. Como carrego uma fonte quando os dados binários começam em um deslocamento específico dentro de um arquivo?
Use o FontFileDefinition(String fileExtension, StreamSource streamSource, long offset) constructor, passando o deslocamento em bytes onde os dados da fonte começam.